1.6.3. 替换表达式

对于替换表达式,一些字符有特殊的含义。

表 1.25. 替换表达式

替换表达式替换表达式替换的文本
&正则表达式所匹配的内容(在 emacs 中使用 \&
\n前 n 个括号的正则表达式匹配的内容( “n” 是数字)

对 Perl 替换字符串来说,应使用“$&”而非“&”,应使用“$n”而非“\n”。

尝试下列例子

  1. $ echo zzz1abc2efg3hij4 | \
  2. sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/'
  3. zzz=1abc2efg3hij4=
  4. $ echo zzz1abc2efg3hij4 | \
  5. sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/'
  6. zzzefg3hij4===1abc
  7. $ echo zzz1abc2efg3hij4 | \
  8. perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/'
  9. zzzefg3hij4===1abc
  10. $ echo zzz1abc2efg3hij4 | \
  11. perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=$&=/'
  12. zzz=1abc2efg3hij4=

请特别注意这些括号正则表达式的格式,以及这些被匹配的文本在不同的工具中是如何被替换的。

这些正则表达式在一些编辑器中也可以用来移动光标和替换文本。

在 shell 命令行行末的反斜杠 “\” 会跳脱一个换行符(作为空白符),并将光标移动到下一行的行首。

请阅读所有相关手册来学习这些命令。