我写的一些代码中的错误导致某些文件格式不正确。如果它只是一个文件,我可以写
cat filename | sed 's/bad/good/g' >filename2
mv filename2 filename
并修复它。但是,我有几百个文件,我想对所有文件进行相同的转换。
有没有办法将相同的转换应用于使用sed的大量文件,保持文件名相同?
甚至是这项工作的合适工具吗?如果没有,我应该使用什么?
答案 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