1

私が書いたコードのバグにより、一部のファイルが正しくフォーマットされませんでした。ファイルが1つだけなら、私は書くことができました

cat filename | sed 's/bad/good/g' >filename2
mv filename2 filename

そしてそれを修正します。ただし、数百のファイルがあり、それらすべてに対して同じ変換を行いたいと考えています。

ファイル名を同じに保ちながら、sedを使用して多数のファイルに同じ変換を適用する方法はありますか?

sed はこの仕事に適したツールですか? そうでない場合は、何を使用すればよいですか?

4

1 に答える 1

4

-i最新バージョンの sed では (インプレース) オプションを使用します。

sed -i 's/bad/good/g' file*pattern

または、find を使用して

find . -type f -name 'file*pattern' -print0 | xargs -0 sed -i 's/bad/good/g'

何かがうまくいかないことが心配な場合は、 への引数としてサフィックスを指定でき-iます。変換が適用される前に、各ファイルのバックアップ コピーがそのサフィックスで保存されます。

sed -i.bak 's/bad/good/g' filename
diff filename.bak filename

お使いの sed のバージョンがこのオプションをサポートしていない-i場合は、いつでも perl を使用できます。これは、sed がアイデアを得た場所です (perl のコマンドライン構文の多くは sed から来ているため、公正な判断です)。

perl -pi.bak -e 's/bad/good/g' filenames
于 2012-05-03T01:32:51.593 に答える