给定某个文件中的字符串:
hel string1
hell string2
hello string3
我想使用hel
cat file | grep 'regexp here'
我尝试了一堆正则表达式但似乎没有效果。最有意义的是:grep -E '\Ahel'
但这似乎不起作用。但它适用于http://rubular.com/
。任何想法为什么不能使用grep
?
此外,如果在每行之前使用制表符空格粘贴上述字符串,则\A
似乎无效rubular
。我认为\A
匹配字符串的开头,这与之前的字符无关。为什么\A
在字符串前面有空格时会停止匹配?
答案 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