1

我编写的某些代码中的一个错误导致某些文件的格式不正确。如果只有一个文件,我可以写

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

并修复它。但是,我有数百个文件,我想对所有文件进行相同的转换。

有没有办法使用 sed 对大量文件应用相同的转换,保持文件名相同?

sed 甚至是这项工作的正确工具吗?如果没有,我应该使用什么?

4

1 回答 1

4

在现代版本的 sed 上使用-i(就地)选项。

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

或者,使用查找

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 回答