0

私はsedから始めています。この問題を解決する方法を教えてくれる人はいますか? これから始めて、sed の基本的なコマンドを説明します。

{0}{20}First subtitle
{30}{50}Second subtitle|New line is made this way.
{70}{100}Third.
{1010}{1033}Fourth etc.

括弧内の数字は、字幕が表示される開始位置と終了位置を意味します。このように字幕の翻訳を行う翻訳者を用意しましょう (私はこのテキストに署名します (*)):

{0}{20}First subtitle
Translation of the first subtitle.
{30}{50}Second subtitle|New line is made this way.
Translation of the second subtitle.|Second line of translation of the second subtitle.
{70}{100}Third.
Translation of third.
{1010}{1033}Fourth etc.
Translation of fourth etc.

3 つのことを行う必要があります: 1) 翻訳された字幕を分離します。

{0}{20}Translation of the first subtitle.
{30}{50}Translation of the second subtitle|Second line of translation of the second subtitle.
{70}{100}Translation of third.
{1010}{1033}Translation of fourth etc.

2) 両方の字幕 (* で署名) を持つテキストから元の字幕のみを分離し、これを取得します。

{0}{20}First subtitle
{30}{50}Second subtitle|New line is made this way.
{70}{100}Third.
{1010}{1033}Fourth etc.

3) 1) と 2) からの出力を取得し、両方の字幕 (署名付き *) を含む元のテキストを取得します。

{0}{20}First subtitle
Translation of the first subtitle.
{30}{50}Second subtitle|New line is made this way.
Translation of the second subtitle.|Second line of translation of the second subtitle.
{70}{100}Third.
Translation of third.
{1010}{1033}Fourth etc.
Translation of fourth etc.

誰か始め方のアドバイスを教えてください。どうもありがとう。

私はおそらく次のように呼ぶことに言及する必要があります(明確にする必要があります):

cat input_file.txt | sed <"program" in sed>
4

2 に答える 2

0

字幕ファイルの翻訳を字幕ファイル file_1に保存したら、次のコマンドを実行します。 file_2

sed -r 's/^[{][0-9]+[}][{][0-9]+[}]//' file_2 | paste -d"\n" file_1 - 
于 2012-11-11T18:36:34.697 に答える
0

それを行う1つの方法:


ステップ 1 と 2: (*) から翻訳された字幕と元の字幕を分離します (sub_both以下のスクリプトで呼び出します)。

sed -r '
/^((\{[0-9]+\}){2}).*/ {
    w sub_orig
    s//\1/
    N
}
s/\n//
w sub_tran
' sub_both

それがすることは次のとおりです。

  1. 中括弧で囲まれた 2 つの数字のシーケンスで始まる行に一致します。
  2. それらの行をファイルに書き込みますsub_orig
  3. 行を最初にキャプチャされた部分式 (2 つの数字のシーケンス) に置き換えます。
  4. 次の行 (翻訳された行) をパターン スペースに追加します。思い出したように、3.の後のパターン スペースは 2 つの数字のシーケンスです。
  5. パターンスペースの改行を削除すると、{digits}{digits}translated line...
  6. パターン空間をファイルに書き込むsub_tran

ステップ 3: と が得られたので、(*) を次のように再構築しsub_origます。sub_transub_both_2

paste -d "\n" sub_orig <(sed -r '/^((\{[0-9]+\}){2})//' sub_tran) >sub_both_2 

sub_transedは、2 つの数字シーケンスを削除するために前処理され、2 つのファイルは区切り文字として改行を使用してマージされます。

p/s:<(command)から一時ファイルを作成するプロセス置換ですcommand

于 2012-11-14T05:34:30.537 に答える