问候。
这么简单的问题让我难过。这里的人非常乐于助人。
我正在尝试匹配包含一些固定文本和随机数字的字符串。
echo blah blah abc123 | grep -o abc
abc
echo blah blah abc123 | grep -o abc[0-9]
abc1
echo blah blah abc123 | grep -o abc[0-9]+
echo blah blah abc123 | grep -o "abc[0-9]+"
echo blah blah abc123 | grep -o "abc[0-9]*"
abc123
echo blah blah abc123 | grep -o abc[0-9]{3}
echo blah blah abc123 | grep -o "abc[0-9]{3}"
*运算符(匹配零次或多次)是唯一可以按预期工作的运算符。
为什么+运算符(匹配1次或多次)不匹配?
为什么特定的重复计数运算符{3}不匹配?
我在Ubuntu 10.10下的bash shell中运行这些示例,如果它有所不同。
非常感谢。
答案 0 :(得分:6)
当你逃避特殊字符时它们都起作用:
$ echo blah blah abc123 | grep -o "abc[0-9]\+"
abc123
$ echo blah blah abc123 | grep -o "abc[0-9]\{3\}"
abc123
未转义,正则表达式正在寻找文字+
或{
,正如您可能推断的那样。
至于为什么你必须保持*
未转义,但你必须逃避+
,我不确定。