1.6.4. 正则表达式的全局替换

ed(1) 命令可以在 “file” 中将所有的 “FROM_REGEX” 替换成 “TO_TEXT” 。

  1. $ ed file <<EOF
  2. ,s/FROM_REGEX/TO_TEXT/g
  3. w
  4. q
  5. EOF

sed(1) 命令可以在 “file” 中将所有的 “FROM_REGEX” 替换成 “TO_TEXT” 。

  1. $ sed -i -e 's/FROM_REGEX/TO_TEXT/g' file

vim(1) 命令可以通过使用 ex(1) 命令在 “file” 中将所有的 “FROM_REGEX” 替换成 “TO_TEXT” 。

  1. $ vim '+%s/FROM_REGEX/TO_TEXT/gc' '+w' '+q' file
[提示]提示

上面的 “c” 标志可以确保在每次替换时都进行交互式的确认。

多个文件( “file1”,“file2” 和 “file3” )可以使用 vim(1) 或 perl(1) 通过正则表达式进行类似的处理。

  1. $ vim '+argdo %s/FROM_REGEX/TO_TEXT/ge|update' '+q' file1 file2 file3
[提示]提示

上面的 “e” 标志是为了防止 “No match” 错误中断替换。

  1. $ perl -i -p -e 's/FROM_REGEX/TO_TEXT/g;' file1 file2 file3

在 perl(1)例子中 , “-i“ 是在每一个目标文件的原处编辑,”-p“ 是表示循环所有给定的文件。

[提示]提示

使用参数 “-i.bak” 代替 “-i” ,可以在文件名后添加 “.bak” 再保存。对于复杂的替换,这使得从错误中恢复变得容易。

[注意]注意

ed(1) 和 vim(1) 使用 BRE ; perl(1) 使用 ERE