하드 포장 하드 리필

하드 포장 하드 리필

이 파일이 주어지면:

$ cat file
alfa bravo charlie delta echo foxtrot golf hotel india juliet kilo lima mike
november oscar papa quebec romeo sierra tango
uniform_victor_whiskey_xray yankee zulu

70세가 되면 돌파도 하고 싶기도 하고, 보충도 열심히 하고 싶어요. "접기"를 시도했지만 다시 채워지지 않았습니다.

$ fold -w 70 file
alfa bravo charlie delta echo foxtrot golf hotel india juliet kilo lim
a mike
november oscar papa quebec romeo sierra tango
uniform_victor_whiskey_xray yankee zulu

"fmt"는 다시 채워지지만 공백에서만 구분할 수 있으므로 정확히 70개의 줄 바꿈이 보장되지는 않습니다.

$ fmt file
alfa bravo charlie delta echo foxtrot golf hotel india juliet
kilo lima mike november oscar papa quebec romeo sierra tango
uniform_victor_whiskey_xray yankee zulu

"pr"을 시도했지만 줄 바꿈 없이 줄만 잘린 것 같습니다.

$ pr -t -W 70 file
alfa bravo charlie delta echo foxtrot golf hotel india juliet kilo lim
november oscar papa quebec romeo sierra tango
uniform_victor_whiskey_xray yankee zulu

어쩌면 이 명령에 내가 놓친 몇 가지 옵션이 있거나 Awk 또는 Sed 솔루션이 있을 수도 있습니다. 나는 더 무거운 솔루션(Perl PHP Ruby)을 피하고 싶습니다.

답변1

sed 사용

GNU sed 사용:

$ sed -zE 's/\n/ /g; s/.{70}/&\n/g; s/$/\n/' file
alfa bravo charlie delta echo foxtrot golf hotel india juliet kilo lim
a mike november oscar papa quebec romeo sierra tango uniform_victor_wh
iskey_xray yankee zulu 

POSIX sed의 경우:

sed -zE 'H;1h;$!d;x; s/\n/ /g; s/.{70}/&\n/g; s/$/\n/' file

awk를 사용하세요

$ awk  '{r=(length(r)?r" "$0:$0); while(length(r)>70){print substr(r,1,70); r=substr(r,71)}} END{print r}' file
alfa bravo charlie delta echo foxtrot golf hotel india juliet kilo lim
a mike november oscar papa quebec romeo sierra tango uniform_victor_wh
iskey_xray yankee zulu

tr 및 폴드 사용

$ tr '\n' ' ' <file | fold -w 70
alfa bravo charlie delta echo foxtrot golf hotel india juliet kilo lim
a mike november oscar papa quebec romeo sierra tango uniform_victor_wh
iskey_xray yankee zulu

위의 코드는 후행 줄바꿈을 생성하지 않지만 필요한 경우 추가할 수 있습니다 echo "".

tr '\n' ' ' <file | fold -w 70; echo

답변2

이는 모든 상황에서 작동하지는 않지만 대부분의 사용 사례에 적용됩니다.

$ fmt -w 2500 file | fold -w 70
alfa bravo charlie delta echo foxtrot golf hotel india juliet kilo lim
a mike november oscar papa quebec romeo sierra tango uniform_victor_wh
iskey_xray yankee zulu

관련 정보