次のようなことができます:
find -wholename "*.txt" | xargs sed -n '/foo/p;s/foo/bar/gp'
これが行うことは、置換したい行を出力し、次の行に置換を出力することです。
ファイル名も使用awk
および取得できます。
find -wholename "*.txt" | xargs awk '/foo/{print FILENAME; gsub(/foo/,"bar");print}'
ファイル全体を印刷するには、削除print
して追加します1
find -wholename "*.txt" | xargs awk '/foo/{print FILENAME; gsub(/foo/,"bar")}1'
正規表現は要件に応じて変更する必要があり、ファイル内の変更はgawk version 4.1
テスト:
$ head file*
==> file1 <==
,,"user1","email"
,,"user2","email"
,,"user3","email"
,,"user4","email"
==> file2 <==
,,user2,location2
,,user4,location4
,,user1,location1
,,user3,location3
$ find . -name "file*" -print | xargs awk '/user1/{print FILENAME; gsub(/user1/,"TESTING");print}'
./file1
,,"TESTING","email"
./file2
,,TESTING,location1