grep でリストアップ後、sedの -i オプションを使用して上書き置換
状態:-
閲覧数:2,299
投稿日:2015-06-14
更新日:2018-03-29
考え方
1.置換対象のファイルを grep でリストアップ
2.sedの -i オプションを使用して上書き置換
構文
カレントディレクトリ以下の全ファイル内容を全文置換
grep -rl 置換前文字列 . | xargs sed -i 's/置換前文字列/置換後文字列/g'
具体例
カレントディレクトリ以下にある全ファイル内容の'e1blue.net'を'e1blue.co'へ全文置換
# grep -rl e1blue.net . | xargs sed -i 's/e1blue\.net/e1blue.co/g'
迷走履歴
遭遇エラー
grep: オプションが違います
sed: オプションが違います -- '-'
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
sed: ☆☆.svgを読み込めません: そのようなファイルやディレクトリはありません
・ファイル名に日本語を付与していると、読込エラー?
具体例
カレントディレクトリ以下にある全ファイル内容の'e1blue.net'を'e1blue.co'へ全文置換
失敗
# grep -rl e1blue.net . | xargs sed -i 's/e1blue.net/e1blue.co/g'
成功
・「.」は任意の一文字にマッチする正規表現なので、「\」でエスケープ処理が必要(e1blue.net 内の . のみ)。
# grep -rl e1blue.net . | xargs sed -i 's/e1blue\.net/e1blue.co/g'
・ファイル拡張子などで条件を絞って全置換するためには、「grep」ではなく「find」を使用