JW0*_*W01 7 grep regular-expression
我的印象是插入符号意味着“行的开头”,带有扩展的 POSIX 正则表达式。
但是,当我使用它时,grep
它的行为出乎意料。
我在Ubuntu 10.04 Lucid Lynx上使用GNU grep
2.5.4。
我回显一行'你好',然后将它传送grep
到搜索“零个或多个空白字符后跟字母h ”的a:
echo ' hello' | grep -E '[:space:]*h'
hello
Run Code Online (Sandbox Code Playgroud)
grep
觉得没问题。
如果我添加一个插入符号来表示我只希望模式匹配“零个或多个空白字符,后跟字符串开头的字母h ”:
echo ' hello' | grep -E '^[:space:]*h'
Run Code Online (Sandbox Code Playgroud)
未找到匹配项。我希望字符串匹配,因为它以空格开头,后跟h。
为什么这个插入符号会阻止匹配?
要找到一个空格,您必须[:space:]
在另一对括号内使用,它看起来像[[:space:]]
. 你可能想表达grep -E '^[[:space:]]*h'
要解释为什么您当前的失败:
就目前而言,[:space:]*h
包括一个字符类,查找任何字符::
, s
, p
, a
, c
, 并且e
出现任意次数(包括 0),后跟h
. 这与您的字符串匹配得很好,但是如果您运行grep -o
,您会发现您只匹配了h
,而不是空格。
如果在开头添加克拉,则这些字母之一或h
必须在字符串的开头才能匹配,但没有一个是,因此不匹配。