使用 shell 命令进行查找替换

需要使用到 sed 命令,以下是来自 man page 的介绍:

   sed - stream editor for filtering and transforming text

示例:

$ sed -i -e 's/toreplace/newcontent/g’ somefile.txt 

以上脚本将查找 somefile.txttoreplace 文本并替换为 yoursetting。其中这两部分都可以为正则表达式。

其中,

  • s 表示 substitute 即替换之意,
  • g 表示 global,进行全局替换而不是只替换一个
  • -i 表示 in-place 即原地替换,而不是创建新文件
  • -e 表示执行随后的命令

多文件或整个目录扫描

上述命令只扫描单个文件,如果想扫描整个目录,可结合 find 来实现:

$ find . -type f -exec sed -i -e 's/foo/xxx/g' {} \;

如果上述命令报如下错误:

sed: RE error: illegal byte sequence

需要设置当前命令行的 LANG 变量:

export LC_CTYPE=C 
export LANG=C

结合 grep

需要批量处理文件时,也可结合 grep 实现。

$ grep -rl foo . | xargs sed -i -e 's/foo/xxx/g'

相关资源