sed を使用して複数のファイルで文字列を検索および置換する [duplicate]

sed を使用して複数のファイルで文字列を検索および置換する [duplicate]

検索と置換のために、既知の文字セットを含むファイルのリストをsedに渡そうとします。

複数の.xmlファイルを含むディレクトリの場合:

ls -la

file1.xml
file2.xml
file3.xml

それぞれは一致する文字列を含みます。

grep -i foo *

file1.xml <foo/>
file2.xml <foo/>
file3.xml <foo/>

fooをbarに置き換えるには、forループを使用してください。

for f in *.xml; do ls | sed -i "s|foo|bar|g" ; done

返品:

sed: no input files
sed: no input files
sed: no input files

私は効果的な選択肢を見つけたので、これは主に私自身のインスピレーションのためです。

find /dir/ -name '*.xml' -exec sed -i "s|foo|bar|g" {} \;

ベストアンサー1

ループに欠陥がありますfor。コマンドを削除しls$f変数を引数として追加すると、sed -i各変数は内部で編集されます。filename.xml

for f in *.xml; do sed -i "s|foo|bar|g" "$f"; done

おすすめ記事