我在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 吗?
答案 0 :(得分:1)
不,因为\([a-z]*\)
捕获了abcd
部分,而\1
反向引用又将其重新插入。
要删除字符串的其余部分,请在捕获组后使用.*
:
echo abcd 123 | sed 's/\([a-z]*\).*/\1/'
如果字母出现在字符串的开头,请在模式开始处添加^
。