Linux 下查找替换的一个小例子
By:Roy.LiuLast updated:2012-11-20
最近遇到一个问题,一个程序有很多配置文件,在这些配置文件里有一些关键词需要替换,当然,这些关键词在很多文件中,也可能在子目录中。我可不太想一个文件一个文件的打开去检查,查找替换。这是没有办法才会做的事。当然可以通过编程用 正则表达式 去做。用程序遍历整个文件夹,然后用程序去替换。但其实还可以用shell 脚本实现,很简单的。
为了做测试,我自己建立了一个Test 文件夹,里面放了两个文件,其中多个地方都有内容"old text" ,两个文件都有。
比如 1.txt 的内容如下
文件2.txt 里面的内容,也有很多 "old text" 的关键词.
现在开始替换,有两种情况:
查找和替换所有文件
运行之后,你会发现 Test 文件夹下所有文件里包含 old text 都被替换成了 new text .达到我的目的。详细介绍下命令:
grep 表示过滤,管道
-l 表示列表
-r 表示递归
-e 表示正则表达式
s/ 表示替换
/g 表示全局,也就是替换所有的.
查找和替换指定的文件
对指定的文件,就可以这样替换了。
参考文档: http://www.linuxjournal.com/content/applying-xargs
为了做测试,我自己建立了一个Test 文件夹,里面放了两个文件,其中多个地方都有内容"old text" ,两个文件都有。
比如 1.txt 的内容如下
this is a test file how can i replace text , ============== the old text 001 the old text 002 ==============
文件2.txt 里面的内容,也有很多 "old text" 的关键词.
现在开始替换,有两种情况:
查找和替换所有文件
grep -lr -e 'old text' * | xargs sed -i 's/old text/new text/g'
运行之后,你会发现 Test 文件夹下所有文件里包含 old text 都被替换成了 new text .达到我的目的。详细介绍下命令:
grep 表示过滤,管道
-l 表示列表
-r 表示递归
-e 表示正则表达式
s/ 表示替换
/g 表示全局,也就是替换所有的.
查找和替换指定的文件
find -name 1.txt|xargs sed -i 's/old text/new text/g'
对指定的文件,就可以这样替换了。
参考文档: http://www.linuxjournal.com/content/applying-xargs
From:一号门
Next:怎么在linux 下查找一个文件
COMMENTS