次のフォルダ構造があります。
a/b/sample.txt
c/d/e/sample1.txt
サンプルファイルとサンプルファイルの両方に文が含まれています。My name is Debojyoti
e/f/sample2.txt
g/h/i/sample3.txt
Sample2ファイルとSample3ファイルの両方に文が含まれています。My name is George
今私はandGeorge
に変更したいと思います。Debojyoti
Debojyoti
George
すべてのUNIXシェルスクリプトは、フォルダ名をハードコードすることなくこれを行うことができます。
ベストアンサー1
GNUシステムでは、次のことができます。
grep -rlZ -e Debojyoti -e George . |
xargs -r0 sed -i '
s/Debojyoti/\n/g
s/George/Debojyoti/g
s/\n/George/g'
grep
2つのNULで区切られた1つ以上の文字列を含むファイルを一覧表示します。
xargs
リストをsed -i
内部編集に渡します。
sed
一度に 1 行ずつファイルを処理します。各行に対して、すべての項目がDebojyoti
最初に改行文字に置き換えられます(そうでない場合コンテンツline)の場合、George
その項目はに置き換えられますDebojyoti
。その後、改行文字(元のs Debojyoti
)がに置き換えられますGeorge
。
GNUに加えて、次のものもsed
使用できますperl
。
perl -pi -e 's/(G)eorge|Debojyoti/$1 ? "Debojyoti" : "George"/ge'