ファイルをプレーンテキストファイルに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行で表示)
どうすればいいですか?
答え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
これは、「空行」で区切られたテキストブロックを、フィールドがテキストブロックの個々の行である入力レコードとして解釈します。これにより、上記のコマンドは最初の2つのフィールド(=行)を「空の」文字列に置き換えて行全体を印刷します。
「実際の出力」の前には、2つのスペース(出力フィールド区切り文字)が残ります。これが問題の場合は、-internalループを使用して残りのフィールドのみを明示的に印刷できますawk
。
awk -v RS= -F'\n' '{for (i=3; i<NF; i++) printf("%s ",$i); printf("%s\n",$NF)}' file.srt > file.txt