map.txt
たとえば、検索文字列と対応する置換のリストを含むファイルがあります。
search -> replacement
bigBone -> bb
fishMarket -> fm
dogCollar -> dc
...
シンボリック リンクを除くフォルダー内のすべてのファイルに対して、上記に一致するすべての文字列の検索と置換を再帰的に実行する必要があります。次のように 1 つずつ実行する方法があります。
$ find /some/folder -type f -exec sed -i 's/old_text/new_text/g' {} \;
上記のマッピングを使用してこれを大規模に実行するにはどうすればいいでしょうか?この質問、しかし、よく分かりません。
答え1
答え
速度を気にしない場合は (これは 1 回限りのタスクです)、次の方法を試してみてください。
cat map.txt | while read line; do
neww=${line##* };
oldw=${line%% *};
find /some/folder -type f -exec sed -i "s/$oldw/$neww/g" {} \;
done
最適ではないことはわかっています... :-P
PS: テスト フォルダーで確認して、動作するかどうかを確認してください。
説明
基本的に:
- 猫ファイル map.txt。
- 各行を読み取り、置換される単語
$oldw
と置換後の単語を取得します$neww
。 - 各ペアに対して、すでに使用していた find コマンドを実行します (今回は変数の置換を可能にするために二重引用符を使用していることに注意してください)。
パラメータ拡張について
$oldw
変数とを設定するには、各行の最初と最後の単語を取得する必要があります。そのためには、パラメータ展開 (純粋な Bash 実装) を使用しますが、文字列の最初と最後の単語を取得する他の方法 (つまり、 または)$neww
を使用することもできます。cut
awk
${line##* }
: 変数 からline
、最大のプレフィックス (double#
) パターンを削除します。ここで、パターンは任意の文字 (*
) とそれに続くスペース () です。したがって、 の最後の単語が取得されます
line
。${line%% *}
: 変数 からline
、最大の接尾辞 (double%
) パターンを削除します。ここで、パターンはスペース () とそれに続く任意の文字 (
*
) です。したがって、 の最初の単語が取得されますline
。
この場合、単語はスペースで区切られていますが、任意の区切り文字を使用することもできます。
答え2
場合によっては、設定ファイル内の用語を検索して置換する必要があります。
githubで公開されているスクリプトを書きましたsandr - 検索と置換マップを作成/使用し、ファイル内の置換を実行できます。
使用例:
$ cat file
Voyez ce jeu exquis wallon, de graphie en kit mais bref. Portez ce vieux whisky au juge blond qui fume sur son île intérieure, à côté de l'alcôve ovoïde, où les bûches se consument dans l'âtre, ce qui lui permet de penser à la cænogenèse de l'être dont il est question dans la cause ambiguë entendue à Moÿ, dans un capharnaüm qui, pense-t-il, diminue çà et là la qualité de son œuvre. Prouvez, beau j
$ cat map.txt
wallon => WALLON
se => SE
penser => PENSER
beau => BEAU
$ cat file | ./sandr -a map.txt
Voyez ce jeu exquis WALLON, de graphie en kit mais bref. Portez ce vieux whisky au juge blond qui fume sur son île intérieure, à côté de l'alcôve ovoïde, où les bûches SE consument dans l'âtre, ce qui lui permet de PENSER à la cænogenèSE de l'être dont il est question dans la cauSE ambiguë entendue à Moÿ, dans un capharnaüm qui, penSE-t-il, diminue çà et là la qualité de son œuvre. Prouvez, BEAU j