bashを使用して、特定の文字列A
を含むファイルでbashを使用してファイルを置換しようとしました(B
をC
と置き換えます)。特定の文字列を含むファイルに対してのみsedを呼び出す - ファイル名に空白文字で問題がある
私は
grep -Rl "A" | xargs sed -i 's/B/C'
を試みたが、ファイル名が醜い回避策として空白
が含まれている場合、これは失敗し、私はプレースホルダで空白に置き換えられ、次の解決策を考え出した:
for FILE in `grep -Rl "A" | tr " " "@"`;
do F1=`echo $FILE | tr "@" " "`;sed 's/B/C/' "$F1";
done
もっと洗練されたソリューションがありますか? grep
コマンドの各ファイル名の後に
grep --null -Rl 'A' . | xargs -0 sed -i '' 's/B/C/'
--null
出力ゼロバイト(ASCII NUL文字)をしてxargs -0
はxargs
にヌル終了の入力を読み取ります
も参照してください。http://stackoverflow.com/q/15976570/2908724 – bishop