语法格式
sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录`
实例
以下我们实现把 “/root/github/docs/”目录下 包含 “old.com”文本 的文件查找出来,并将这些文件中的 “old.com”文本 替换为 “new.com”文本:
sed -i "s/old.com/new.com/g" `grep old.com -rl /root/github/docs/`
#实测处理3.5k个文件只需要最多8秒(包含子目录)
注意要点
- 若有特殊字符,需用 “\” 来转义。
命令解释
sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录`
sed命令参数解释:
sed 命令是利用脚本来处理文本文件。可依照脚本的指令来处理、编辑文本文件。主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
-i :表示inplace edit,就地修改文件。sed 的 -i 选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!
s :取代替换,通常这个 s 的动作可以搭配正则表达式!例如 s/old/new/g 就是把old字符替换成new字符!
grep命令参数解释:
grep 命令用于查找文件里符合条件的字符串。
-r 表示搜索子目录。-r, --recursive like --directories=recurse 。此参数的效果和指定"-d recurse"参数相同。recurse=递归子目录 (参数 -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。)
-l 表示输出匹配的文件名。 -l, --files-with-matches print only names of FILEs with selected lines
参考资料