リストに基づいてsed置換(s / / / g)を実行するには?複数の単語を対応する別の単語に置き換える必要があります。

リストに基づいてsed置換(s / / / g)を実行するには?複数の単語を対応する別の単語に置き換える必要があります。

sed以前に誰もこの質問をしたことがないようで、私がこのようなことをすることができるかもしれません。

ある文に多くの数字があり、それを単語に拡張する必要があるとしましょう。実際の例は、一般的な論文で番号付けされた引用をMLA形式に置き換えることです。

essay.txt:

Sentence 1 [1]. sentence two [1][2]. Sentence three[1][3].

Key.txt(タブ区切りファイルです):

1   source-one
2   source-two
3   source-three
...etc

予想されるResult.txt:

Sentence 1 [source-one]. sentence two [source-one][source-two]. Sentence three[source-one][source-three]

以下は疑似コードの試みです。ただし、これについて十分に知らない、またはsed正しくtr実行できません。

 cat essay.txt | sed s/$(awk {print $1} key.txt)/$(awk {print $2} key.txt)/g

PS:メモ帳++に複数の用語を使用して一括検索と置換のためのトリックがある場合は良いでしょう。実際には、検索と置換は一度に1つの用語に対してのみ機能するように見えますが、同時に複数の用語に対してまとめて動作する方法が必要です。

ベストアンサー1

以下を使用する必要がありますperl

$ perl -ne '
  ++$nr;
  if ($nr == $.) {
    @w = split;
    $k{$w[0]} = $w[1];
  }
  else {
    for $i (keys %k) {
      s/(\[)$i(\])/$1.$k{$i}.$2/ge
    }
    print;
  }
  close ARGV if eof;
' key.txt essay.txt
Sentence 1 [source-one]. sentence two [source-one][source-two]. Sentence three[source-one][source-three]

おすすめ記事