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