子模式反向替换

子模式反向替换

Content #

sed编辑器使用圆括号来定义替换模式中的子模式。随后使用特殊的字符组合来引用每个子模式匹配到的文本。反向引用由反斜线和数字组成。数字表明子模式的序号,第一个子模式为\1,第二个子模式为\2,以此类推。

在替换命令中使用圆括号时,必须使用转义字符,以此表明这不是普通的圆括号,而是用于划分子模式。这跟转义其他特殊字符正好相反。

来看一个在sed编辑器脚本中使用反向引用的例子: $ echo “The Guide to Programming” | > sed ' > s/\(Guide to\) Programming/\1 DevOps/' The Guide to DevOps $ 这个替换命令将Guide To放入圆括号,将其标示为一个子模式。然后使用\1来提取该子模式匹配到的文本。

如果需要用一个单词来替换一个短语,而这个单词刚好又是该短语的子串,但在子串中用到了特殊的模式字符,那么这时使用子模式会方便很多: $ echo “That furry cat is pretty.” | > sed ’s/furry \(.at\)/\1/' That cat is pretty. $ $ echo “That furry hat is pretty.” | > sed ’s/furry \(.at\)/\1/' That hat is pretty. $ 在这种情况下,不能用&符号,因为它代表的是整个模式所匹配到的文本。而反向引用则允许将某个子模式匹配到的文本作为替换内容。

当需要在两个或多个子模式间插入文本时,这个特性尤其有用。比如: 在大数中插入逗号

From #

Linux命令行与shell脚本编程大全