12

私はこのコマンドを試しました、

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
4

3 に答える 3

27

OS Xのバージョンsedはをサポートしていますが、バックアップファイルに(またはバックアップなしで)使用するファイル拡張子を指定するための引数-i必要""です。ところで、あなたgrep -lはファイル名だけを取得したいです。

grep -l '/static' dir/* | xargs sed -i "" 's/\/static//g'
于 2012-08-14T02:24:40.027 に答える
3

perlを使用する:

$ perl -pi.bak -e 's@/static@@g' dir/*
于 2012-08-13T21:14:58.857 に答える
1

これは、ループを使用して実行できます。

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でそれを行う方法が正確にはわかりません)。

于 2012-08-13T21:33:22.040 に答える