web-dev-qa-db-ja.com

正規表現-文字列に一致する行の順序付きリストを別のリストに置き換えます

私は問題を総合的にうまく説明することができなかったような混乱した考えを持っているので、タイトルは恐ろしいです。あなたがそれにいる間、私にももっと良いものを提案してください。

基本的に、同じ行数の2つのSubRip(.srt)字幕があります。それらは異なる言語であり、私はそれらを同期する必要があります。

一方を他方にポイント同期しても、十分な結果は得られません。これは、2番目の同期には明らかにタイミングの悪いラインがあるためです。私がやりたいのは、タイムスタンプを最初から2番目にコピーすることです。

一部の行に改行がある場合、タイミングは固定パターンでリズムが調整されません。タイミングの線を引くには、開始時間から終了時間に向かう矢印を探す必要があります。

1.srt

1
00:00:01,336 --> 00:00:03,437
Foo

2
00:00:03,440 --> 00:00:05,093
Bar
Baz

3
00:00:05,096 --> 00:00:07,330
Qux

2.srt

1
00:00:01,336 --> 00:00:03,935
Quux

2
00:00:03,936 --> 00:00:05,201
Garply
Waldo

3
00:00:05,803 --> 00:00:07,467
Fred
more 1.srt | grep -- "-->"

00:00:01,336 --> 00:00:03,437
00:00:03,440 --> 00:00:05,093
00:00:05,096 --> 00:00:07,330

more 2.srt  | grep -- "-->"

00:00:01,336 --> 00:00:03,935
00:00:03,936 --> 00:00:05,201
00:00:05,803 --> 00:00:07,467

1.srtのタイムスタンプを含む行を対応する2.srtの行に置き換えるにはどうすればよいですか?

2

ファイルにわかりやすい名前を付けましょう:good-textおよびgood-times

  1. タイムスタンプ付きの行をgood-timesから分離します。

    grep -- '-->' good-times > the-ringer
    
  2. awkで間違ったタイムスタンプを置き換えましょう:

    < good-text awk '
       { if ($2 == "-->") getline < "the-ringer"
       print }
    ' > good-all
    

    awkが2番目のフィールドが-->である行に遭遇するたびに、それはthe-ringerからの行に置き換えられます。

  3. 取り除く ウォルターの汚い下着 ゴミ:rm the-ringer

good-allを調べてください。必要なものが含まれている必要があります。手順全体はawkだけで実行できますが、私は [〜#〜] kiss [〜#〜] に決めました。

2