1

ファイルのディレクトリと、 1 つの列が検索する値のセットであり、2 番目の列が対応する置換値でmyFiles/あるテキスト ファイルがあります。values.txt

目標は、 にあるすべてのファイルの検索値 ( の最初の列values.txt) のすべてのインスタンスを、対応する置換値 ( の 2 列目) に置き換えることです。values.txtmyFiles/

例えば...

values.txt:

こんにちは、さようなら

悲しい幸せ

コマンドを実行すると、 のすべてのファイルで「Hello」のすべてのインスタンスが「さようなら」にmyFiles/置き換えられ、 のすべてのファイルで「Happy」のすべてのインスタンスが「Sad」に置き換えられますmyFiles/

論理的に考えられる限り awk/sed などの使用を試みましたが、目的のアクションを実行するコマンドを作成できませんでした。

任意のガイダンスをいただければ幸いです。ありがとうございました!

4

3 に答える 3

1
  1. から各行を読み取りますvalues.txt
  2. その行を 2 語に分けてください
  3. sed各行に使用して、myFiles/ディレクトリ内のすべてのファイルの最初の単語を 2 番目の単語に置き換えます

注:スペースで区切られた2つの列ファイルであると仮定して、行を分割するためにbashパラメーター拡張${line% *}を使用しました( etc) 。values.txtそうでない場合は、awkorを使用cutして行を分割できます。

while read -r line;do
    sed -i "s/${line#* }/${line% *}/g" myFiles/*  # '-i' edits files in place and 'g' replaces all occurrences of patterns 
done < values.txt
于 2016-07-23T01:31:11.163 に答える
0

オプション 1:

  1. Python スクリプトを作成する
  2. infile として open('filename', 'r') などを使用して、values.txt ファイルを 'from' をキーとして、'to' を値として python dict に読み込みます。インファイルを閉じます。
  3. shutil を使用して、必要なディレクトリを読み取り、ファイルを反復処理し、それぞれに対して popen 'sed 's/from/to/g'" を実行するか、検索/置換する各行のすべての行を反復して各ファイルを読み取ります。

オプション 2:

  1. バッシュスクリプト
  2. from/to ペアを読み込む
  3. 呼び出す

    perl -p -i -e 's/from/to/g' dirname/*.txt

終わり

2 番目はおそらく書きやすいですが、例外処理は少なくなります。これは「Perl PIE」と呼ばれ、多数のファイルを一度に検索/置換するための比較的有名なハックです。

于 2016-07-22T22:36:09.757 に答える