파일을 일반 텍스트 파일로 sed
변환하는 데 사용합니다 . srt` 파일의 형식은 다음과 같습니다.srt
An
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