我编写的某些代码中的错误导致某些文件格式不正确。如果只有一个文件,我可以写
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
关于linux - 对大量文件运行相同的 sed 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10423944/