在命令行上查找并replace多个文件

如何查找和replaceunix上的多个文件的命令行上的string?

有很多方法。但答案之一是:

find . -name '*.html' |xargs perl -pi -e 's/find/replace/g' 

像僵尸解决方案(更快,我承担),但与sed (标准许多发行版和OSX),而不是Perl:

 find . -name '*.py' | xargs sed -i .bak 's/foo/bar/g' 

这将使用bar替换当前目录下Python文件中的所有foo事件 ,并为.py.bak扩展名的每个文件创建一个备份。

并删除de .bak文件:

 find . -name "*.bak" -delete 

我一直用ed脚本ex脚本来做

 for i in "$@"; do ex - "$i" << 'eof'; done %s/old/new/ x eof 

ex命令就是vi中的:line模式。

使用查找和sed与空间名称或目录使用这个:

 find . -name '*.py' -print0 | xargs -0 sed -i 's/foo/bar/g' 

用最近的bash shell,假设你不需要遍历目录

 for file in *.txt do while read -r line do echo ${line//find/replace} > temp done <"file" mv temp "$file" done