긴 줄을 특정 줄 다음에 최대 길이의 별도 줄로 나눕니다.

긴 줄을 특정 줄 다음에 최대 길이의 별도 줄로 나눕니다.

긴 Base64 문자열(112행 이후)이 포함된 대용량 파일이 있습니다. 처음 112줄 중 일부는 80자를 초과하므로 그대로 유지하고 싶습니다. 112행 이후의 모든 행을 최대 80자로 분할하고 싶습니다.

이 예에서는 5행 이후의 모든 행을 최대 80자로 분할하려고 합니다.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip
ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
rcitation ullamco laboris nisi ut aliquip e
rcitation ullamco laboris nisi ut aliquip e
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciBpbiByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xvcmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNhdCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBzdW50IGluIGN1bHBhIHF1aSBvZmZpY2lhIGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLg0KcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZQ0KcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZQ==

예상 출력:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip
ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
rcitation ullamco laboris nisi ut aliquip e
rcitation ullamco laboris nisi ut aliquip e
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2Vk
IGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlx
WEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY
28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0Z
SBpcnVyZSBkb2xvciBpbiByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1b
SBkb2xvcmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNhdCBjd
XBpZGF0YXQgbm9uIHByb2lkZW50LCBzdW50IGluIGN1bHBhIHF1aSBvZmZpY2lhIGRlc2VydW50IG1vb
GxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLg0KcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0I
GFsaXF1aXAgZQ0KcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZQ==

sed를 사용하여 줄을 무시하는 방법은 알고 있지만 최대 문자 제한을 설정하고 줄 분할을 사용하는 방법은 모릅니다. 인터넷에 검색해보니 접이식을 추천해주시더라구요

fold -w80 input.txt

하지만 접으면 선을 무시할 수 없나요? Fold나 sed를 사용하여 이 작업을 수행하는 방법을 아시나요? 어쩌면 어이?

답변1

-i변경 사항을 적용해야 하는 경우 sed를 사용하면 이 작업을 수행할 수 있습니다 input.txt(파일에 80자 길이의 줄이 포함되어 있으면 그 뒤에 빈 줄이 추가됩니다).

sed -E 's/(.{80})/\1\n/g' input.txt

귀하의 경우 112행 이후에만 필요한 경우:

sed -E '113,$s/(.{80})/\1\n/g' input.txt
  • 113,$113번째 줄부터 파일 끝까지
  • s/PATTERN/REPLACEMENT/g각각을 PATTERN다음으로 교체하십시오.REPLACEMENT
  • (.{80})80자 세트
  • \1첫 번째 캡처 그룹

펄 사용:

perl -pe 's/(.{80})(?!$)/\1\n/g if $. > 112' input.txt

답변2

사용행복하다(이전 Perl_6)

raku -pe 's:g/ (.**80) <?before .> /$0\n/ if ++$ > 3;' 

#OR 

raku -ne '++$ > 3 ?? put S:g/ (.**80) <?before .> /$0\n/ !! .put;' 

#OR 

raku -ne 'if ++$ > 3 {put S:g/ (.**80) <?before .> /$0\n/} else {.put};'  

#OR

raku -e '.put for lines.[^3]; put S:g/ (.**80) <?before .> /$0\n/ for lines();'

위의 코드는 샘플 입력의 처음 세(3) 줄을 그대로 인쇄한 다음 나머지 줄을 80자로 하드 압축합니다. 긍정적인 예측 으로 인해 <?before .>정확히 80자의 행은 변경되지 않은 채로 유지됩니다(@Marius_Couet에게 감사드립니다!). OP는 이 답변을 조정하여 처음 112줄 줄 바꿈을 건너뛸 수 있습니다. 참고: 단어~ 할 것이다이 방법을 사용하여 크랙해 보세요.

X샘플 입력(라인 6에 80자 라인 추가):

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip
ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
rcitation ullamco laboris nisi ut aliquip e
rcitation ullamco laboris nisi ut aliquip e
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciBpbiByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xvcmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNhdCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBzdW50IGluIGN1bHBhIHF1aSBvZmZpY2lhIGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLg0KcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZQ0KcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZQ==

예제 출력:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip
ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
rcitation ullamco laboris nisi ut aliquip e
rcitation ullamco laboris nisi ut aliquip e
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2Vk
IGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlx
WEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY
28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0Z
SBpcnVyZSBkb2xvciBpbiByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1b
SBkb2xvcmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNhdCBjd
XBpZGF0YXQgbm9uIHByb2lkZW50LCBzdW50IGluIGN1bHBhIHF1aSBvZmZpY2lhIGRlc2VydW50IG1vb
GxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLg0KcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0I
GFsaXF1aXAgZQ0KcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZQ==

Raku의 관용구(0부터 시작하는 "right-open" 범위) 는 파일의 처음 3줄에 대한 lines.[^3]약어입니다 .lines.[0..2]

https://docs.raku.org/type/Range
https://raku.org

관련 정보