텍스트 파일에서 다섯 번째 세미콜론(;)마다 줄 바꿈을 추가하는 방법

텍스트 파일에서 다섯 번째 세미콜론(;)마다 줄 바꿈을 추가하는 방법

파일은 다음과 같습니다(큰 줄 하나).

a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a; etc......

이제 텍스트를 자르고 5개의 세미콜론( )마다 줄 바꿈하려고 합니다. ;그러면 다음과 같습니다.

a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
etc....

어떻게 해야 하나요?

답변1

그리고 tr그리고paste

tr ';' '\n' < semicolons | paste -d';' - - - - -

시험

$ cat semicolons
a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a

$ tr ';' '\n' < semicolons | paste -d';'  - - - - -
a;a;a;a;a
a;a;a;a;a
a;a;a;a;a
a;a;a;a;a
a;a;a;a;a
a;a;a;a;a
a;a;a;a;a
a;a;a;a;a
a;a;a;a;a

둘 다tr그리고pastePOSIX 표준에 지정되어 있습니다.

;줄 끝에 필수 세미콜론을 추가하세요.

tr ';' '\n' < semicolons | paste -d';' - - - - - | sed s/$/\;/

시험

$ tr ';' '\n' < semicolons | paste -d';' - - - - - | sed s/$/\;/
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;    

답변2

순수하게 GNU sed대체품을 사용합니다:

sed 's/\(\([^;]*;\)\{5\}\)/\1\n/g'

또는 모든 백슬래시를 이스케이프 처리하지 않고 -E(@JoL에게 감사드립니다):

sed -E 's/(([^;]*;){5})/\1\n/g'

예:

$ cat test.txt
a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a;a; etc......

$ cat test.txt | sed 's/\(\([^;]*;\)\{5\}\)/\1\n/g'
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a;a;
a;a;a;a; etc......

설명하다:

  • \([^;]*;\): 정규식 캡처 그룹은 모든 문자(세미콜론 포함)와 일치합니다.
  • \(\([^;]*;\)\{5\}\): 위의 5개 항목과 일치하는 그룹을 캡처하는 정규식입니다. sed명령 에서 이는 와 일치합니다 \1.
  • s/\(\([^;]*;\)\{5\}\)/\1\n/g: 세미콜론( )을 포함한 모든 문자의 5개 항목을 s/각각 자체( )로 바꾸고 그 뒤에 개행 문자( )가 옵니다./g\(\([^;]*;\)\{5\}\)\1\n

답변3

Sed 편집기 방법 5번째 세미콜론 뒤에 개행 문자를 넣고, 개행 문자로 인쇄하고, 개행 문자까지 삭제하고, 패턴 공간이 다 사용될 때까지 n 반복을 플러시합니다.

$ sed -e 's/;/;\n/5;P;D' file 

Perl을 사용하여 세미콜론을 필드 구분 기호로 사용하고 세미콜론을 OFS로 사용하고 끝에 빈 필드를 사용하여 후행 세미콜론을 인쇄하는 5 문자열로 인쇄합니다.

$ perl -F\; -lane '$,=";";
     print splice(@F, 0, 5), q() while @F;
' file 

Awk를 사용하여 5개 필드 묶음을 살펴보고 처음 4개 필드 뒤에 세미콜론을 추가하고 다섯 번째 필드 뒤에 세미콜론 + 개행 문자를 추가합니다. 그런 다음 필드를 인쇄하고 null로 구분합니다.

$ awk -F\; -vOFS= '{
        for(i=1; i<=NF; i++)
            $(i) = $(i) (i%5 ? FS : FS RS)
  }1' file

답변4

이러한 유형의 작업에는 정규식이 적합하지만 시각적 지원과 단순성을 위해 이 작업에는 항상 텍스트 편집기 매크로를 사용합니다.

vim을 사용하면 다음과 같은 작업을 수행할 수 있습니다.

set textwidth=20

또는 이와 유사한 낮은 금액

set wrap

파일을 편집해야 하는 경우 간단한 매크로를 사용할 수 있습니다.

qqf;f;f;f;f;i\n99999@q

그렇게 할 것이다.

관련 정보