使用grep和\ A regexp匹配字符串

时间:2013-10-14 16:37:58

标签: regex bash grep

给定某个文件中的字符串:

hel           string1
hell          string2
hello         string3

我想使用hel

捕获cat file | grep 'regexp here'

我尝试了一堆正则表达式但似乎没有效果。最有意义的是:grep -E '\Ahel'但这似乎不起作用。但它适用于http://rubular.com/。任何想法为什么不能使用grep

此外,如果在每行之前使用制表符空格粘贴上述字符串,则\A似乎无效rubular。我认为\A匹配字符串的开头,这与之前的字符无关。为什么\A在字符串前面有空格时会停止匹配?

4 个答案:

答案 0 :(得分:3)

ERE-E)不支持\A表示匹配开始。请改为^

使用-m 1在每个文件中的第一个匹配后停止grepping。

如果您希望grep仅打印匹配的字符串(而不是整行),请使用-o

如果要禁止在grep输出中打印文件名,请使用-h

示例:

 grep -Eohm 1 "^hel" *.log

如果您需要强制仅在搜索字符串位于文件的第一行时输出,则可以使用head

 head -qn 1 *.log | grep -Eoh "^hel"

答案 1 :(得分:2)

ERE不支持\A,但PCRE确实grep -P可以使用相同的正则表达式(如果可用):

grep -P '\Ahel\b' file
hel           string1

同样重要的是使用字边界\b来限制匹配hello

或者在ERE中你可以使用:

egrep '^hel\b' 
hel           string1

答案 2 :(得分:1)

  

我认为\ A匹配字符串的开头,无论之前的字符是什么都无关紧要。为什么\在字符串前面有空格时停止匹配?

\A匹配文本的开头,当您的文字中有一行或多行时,它与行尾不匹配。

无论如何,grep不支持\A,所以你需要使用^,这种方式与多行模式中的每一行的开头相匹配,与\A相反。

答案 3 :(得分:0)

使用awk

awk '$1=="hel"' file

PS你不需要cat文件来grep,使用grep 'regexp here' file