Sed
如何通過sed將n更改為空格並將nn更改為n?
我
sed
用來將srt
文件轉換為正常文本文件。An
srt` 文件的格式為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'