如何查找和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