文字列を別の文字列に置き換えるか、その逆

文字列を別の文字列に置き換えるか、その逆

次のフォルダ構造があります。

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に変更したいと思います。DebojyotiDebojyotiGeorge

すべての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'

grep2つの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'

おすすめ記事