문장을 열로 묶기

문장을 열로 묶기

문장을 얻어서 포장하는 방법을 찾고 있어요. column내 시나리오에서는 80자로 된 여러 문장 열이 있기 때문에 그런 것을 사용하는 것은 내가 원하는 것이 아닙니다.

이를 수행할 수 있는 방법이 있습니까? 문장을 한 번만 하는 것은 문제가 되지 않는다는 점을 지적하고 싶습니다. 여러 작업을 동시에 수행합니다.

2014년 5월 15일 | 금요일 | 서버가 다운되어 중단되었습니다 | Rick이 실수로 서버를 껐습니다.

나는 그것을 구분하기 위해 |를 추가했습니다. 그러나 각각은 일정한 길이로 포장됩니다. 동시에 서로를 존중합니다.

답변1

에 대해 이야기하고 있을 수도 있습니다 fold.

$ echo abcdefghijklmnop | fold -w 4
abcd
efgh
ijkl
mnop

From man fold(가장 관련성이 높은 옵션만 표시하며 더 많은 옵션이 있음):

DESCRIPTION
   Wrap  input  lines in each FILE (standard input by default), writing to
   standard output.
   -s, --spaces
          break at spaces

   -w, --width=WIDTH
          use WIDTH columns instead of 80

답변2

다음과 같은 간단한 텍스트 포맷터가 있습니다.FMMT대부분의 배포판이 함께 제공됩니다. 예전에는 Vim이 명령을 내리기 전에는 다음을 사용하여 내부에서 텍스트를 실행할 수 있었습니다 gq.fmtvi%!fmt

라는 대안이 있는 것 같습니다.기준하지만 저는 이 분야에 경험이 없습니다.

fmtGNU coreutils의 일부인 것 같습니다.

답변3

이게 네가 말하는거야?

$ cat temp
This is Some Long Text to Test
This is Also Some Long Text to Test
Final Call: Some Text to Complete This
$ INPUTS=""
$ FOLDWIDTH=5
$ FILENAME=temp
$ cat $FILENAME
This is Some Long Text to Test
This is Also Some Long Text to Test
Final Call: Some Text to Complete This
$ for i in $(seq 1 $(awk 'END{print NR}' $FILENAME))
> do
> INPUTS="$INPUTS <(awk 'NR==$i' $FILENAME | fold -w $FOLDWIDTH)"
> done
$ bash -c "paste $INPUTS"
This    This    Final
is So   is Al    Call
me Lo   so So   : Som
ng Te   me Lo   e Tex
xt to   ng Te   t to
 Test   xt to   Compl
         Test   ete T
                his

하지만 이것은 약간 해킹적입니다. 특히 bash -c최종 명령줄을 해석하기 위해 하위 프로세스를 시작하는 데 사용합니다. 파일을 한 줄씩 구문 분석하고 각 파일을 파일 설명자로 입력하는 다른 방법을 생각해 보았지만 paste좋은 해결책을 얻을 수 없어 이에 의지했습니다. 또한 내 제안은 사용법이 bash -c충분히 명확하지 않은 경우 bash 프로세스 교체를 사용하는 것입니다 .

답변4

당신은 또한 이것을 할 수 있습니다 sed,

$ echo abcdefghijklmnop | sed 's/\(.\{4\}\)/\1\n/g'
abcd
efgh
ijkl
mnop

마지막 빈 줄을 제거하려면,

$ echo abcdefghijklmnop | sed 's/\(.\{4\}\)/\1\n/g' | sed '/^$/d'
abcd
efgh
ijkl
mnop

관련 정보