私はこのコマンドを試しました、
grep '/static' dir/* | xargs sed -i 's/\/static//g'
しかし、私が使用しているsedのバージョンは、-i引数をサポートしていません。
ファイル内の文字列を出力と同じ入力ファイルに置き換えるには、通常、次のようにします。
sed 's/\/static//g' filename.txt > new_filename.txt ; mv new_filename.txt filename.txt
OS Xのバージョンsed
はをサポートしていますが、バックアップファイルに(またはバックアップなしで)使用するファイル拡張子を指定するための引数-i
が必要""
です。ところで、あなたgrep -l
はファイル名だけを取得したいです。
grep -l '/static' dir/* | xargs sed -i "" 's/\/static//g'
perlを使用する:
$ perl -pi.bak -e 's@/static@@g' dir/*
これは、ループを使用して実行できます。
for file in $(grep -l '/static' dir/*) ; do
sed 's/\/static//g' $file > $file.$$ && mv $file.$$ $file
done
.$$
接尾辞($$
現在のシェルのプロセスID)を使用して、既存のファイル名との&&
衝突を回避し、コマンドが何らかの理由で失敗した;
場合に入力ファイルを壊さないようにします。また、grepが行を一致させるのではなく、ファイル名を出力するようsed
に追加しました。-l
または、GNU sedをインストールすることもできます(OSXでそれを行う方法が正確にはわかりません)。