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
回答
速度に興味がない場合(ワンタイム作業)、次のことを試すことができます。
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
。$neww
これを行うには、パラメータ拡張(純粋なBash実装)を使用しますが、文字列の最初の単語と最後の単語(または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