sed를 통해 \n을 공백으로, \n\n을 \n으로 변경하는 방법은 무엇입니까?

sed를 통해 \n을 공백으로, \n\n을 \n으로 변경하는 방법은 무엇입니까?

파일을 일반 텍스트 파일로 sed변환하는 데 사용합니다 . srt` 파일의 형식은 다음과 같습니다.srtAn

1
00:20:41,150 --> 00:20:45,109
line 1
line 2

2
00:21:41,150 --> 00:21:45,109
line 3
line 4

그래서 다음 명령을 사용하여 텍스트가 아닌 줄을 제거했습니다.

sed -r '/^[0-9]+$/{N;d}' file.srt > file.txt

생산하다

line1
line2

line3
line4

하지만 난 얻고 싶어

line1 line2
line3 line4

(각 자막 세그먼트를 한 줄로 표시)

어떻게 해야 하나요?

답변1

이것을 사용하여 스키마를 얻으십시오.

sed ':begin;$!N;s/\n/ /;tbegin' file.txt | sed 's/  /\n/g'

답변2

"단락 모드"에서 조작하여 이를 수행할 수 있어야 합니다 awk(예를 들어 @EdMorton의 솔루션 참조).여기그리고 "첫 번째 필드를 제외한 모든 필드 인쇄" 문제에 대한 해결책스택 오버플로에서)

awk -v RS= -F'\n' '{$1=$2=""; print $0}' file.srt > file.txt

이는 "빈 줄"로 구분된 텍스트 블록을 필드가 텍스트 블록의 개별 줄인 입력 레코드로 해석합니다. 그러면 위 명령은 처음 두 필드(= 줄)를 "빈" 문자열로 바꾸고 전체 줄을 인쇄합니다.

"실제 출력" 앞에 두 개의 공백(출력 필드 구분 기호)이 남습니다. 이것이 문제인 경우 -internal 루프를 사용하여 나머지 필드만 명시적으로 인쇄할 수 있습니다 awk.

awk -v RS= -F'\n' '{for (i=3; i<NF; i++) printf("%s ",$i); printf("%s\n",$NF)}' file.srt > file.txt

관련 정보