RegEx with Back Reference-Unix

时间:2016-06-23 07:43:34

标签: regex unix sed

我在Bourne shell上执行下面的命令,但遇到了一些意外错误。

$ echo abcd 123 | grep --color '[a-z]*'

Output(abcd is colored) : abcd 123

$ echo abcd 123 | sed 's/\([a-z]*\)/\1/'

Output : abcd 123

第二个命令的结果不应仅为 abcd 吗?

1 个答案:

答案 0 :(得分:1)

不,因为\([a-z]*\)捕获了abcd部分,而\1反向引用又将其重新插入。

要删除字符串的其余部分,请在捕获组后使用.*

echo abcd 123 | sed 's/\([a-z]*\).*/\1/'

如果字母出现在字符串的开头,请在模式开始处添加^

这是Bash Ideone demo