Sed

如何通過sed將n更改為空格並將nn更改為n?

  • January 24, 2020

sed用來將srt文件轉換為正常文本文件。Ansrt` 文件的格式為

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

(每個字幕段為一行)

我怎樣才能做到這一點?

您應該能夠通過awk在“段落模式”下操作它來完成此操作(參見例如@EdMorton 的解決方案,以及來自stackoverflow的“列印除第一個欄位之外的所有欄位”問題的解決方案)

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

這會將任何“空行”分隔的文本塊解釋為一個輸入記錄,其欄位是文本塊的各個行。然後,上面的命令將用“空”字元串替換前兩個欄位(=lines)並列印整行。

請注意,這會在“實際輸出”之前留下兩個空格(輸出欄位分隔符)。awk如果這是一個問題,您可以使用-internal 循環僅顯式列印剩餘欄位:

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

用它來獲得你的模式

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

引用自:https://unix.stackexchange.com/questions/563860