对大量文件运行相同的sed转换

时间:2012-05-03 01:29:32

标签: linux shell sed

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

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

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

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

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

1 个答案:

答案 0 :(得分:4)

在现代版本的sed。

上使用-i(就地)选项
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