需要对多个文件进行查找替换时,很容易想到用sed,但是由于不更改原文件,替换后需要先改名,然后再用更改的文件替换原文件,还是不太方便。其实vi中有更简便的方法,就是用argdo命令。可以用:help argdo查找其功能。
比如我需要在所有本目录下的.xml文件中的202.123.23.12 IP替换为localhost
可以用如下方法:
vi *.xml
:argdo %s/202.123.23.12/localhost/ge | update
其中update是直接替换覆盖原文件,若需要确认,则可使用
:argdo %s/202.123.23.12/localhost/gec | update
以下的Blog中有vi替换方法的详细叙述:
http://www.ibrahim-ahmed.com/2008/01/find-and-replace-in-multiple-files-in.html
另外,新版的sed提供了一种同样简便的多文件替换的方法,就是用带-i选项的sed(不过我猜想你需要查看你使用的sed版本是否支持-i选项),其方法是:
sed -i 's/202.123.23.12/localhost/g' *.xml
这样一条命令就完成了所有的替换操作!如果担心进行了错误替换,可以在-i命令后带后缀进行备份,比如:
sed -i.bak 's/202.123.23.12/localhost/g' *.xml
但应注意:替换命令后只需要有g命令,不能再加p命令。
比如我需要在所有本目录下的.xml文件中的202.123.23.12 IP替换为localhost
可以用如下方法:
vi *.xml
:argdo %s/202.123.23.12/localhost/ge | update
其中update是直接替换覆盖原文件,若需要确认,则可使用
:argdo %s/202.123.23.12/localhost/gec | update
以下的Blog中有vi替换方法的详细叙述:
http://www.ibrahim-ahmed.com/2008/01/find-and-replace-in-multiple-files-in.html
另外,新版的sed提供了一种同样简便的多文件替换的方法,就是用带-i选项的sed(不过我猜想你需要查看你使用的sed版本是否支持-i选项),其方法是:
sed -i 's/202.123.23.12/localhost/g' *.xml
这样一条命令就完成了所有的替换操作!如果担心进行了错误替换,可以在-i命令后带后缀进行备份,比如:
sed -i.bak 's/202.123.23.12/localhost/g' *.xml
但应注意:替换命令后只需要有g命令,不能再加p命令。