3

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

hel           string1
hell          string2
hello         string3

我想捕获只是hel使用cat file | grep 'regexp here'

我尝试做一堆正则表达式,但似乎没有一个工作。最有意义的是:grep -E '\Ahel'但这似乎不起作用。但是它可以工作http://rubular.com/。任何想法为什么这不起作用grep

此外,当在每行之前粘贴带有制表符空格的上述字符串时,\A似乎不适用于rubular. 我认为\A匹配字符串的开头,并且在那之前的任何字符都无关紧要。为什么\A字符串前有空格时会停止匹配?

4

4 回答 4

3

ERE ( -E) 不支持\A指示匹配开始。试试^吧。

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

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

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

例子:

 grep -Eohm 1 "^hel" *.log

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

 head -qn 1 *.log | grep -Eoh "^hel"
于 2013-10-14T16:39:29.667 回答
2

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

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

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

或者在 ERE 中,您可以使用:

egrep '^hel\b' 
hel           string1
于 2013-10-14T16:41:46.117 回答
1

我认为 \A 匹配字符串的开头,并且在那之前的任何字符都无关紧要。当字符串前有空格时,为什么 \A 会停止匹配?

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

无论如何, grep 不支持\A,因此您需要使用^which 顺便匹配多行模式中每行的开头,而不是\A.

于 2013-10-14T16:43:20.670 回答
0

使用awk

awk '$1=="hel"' file

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

于 2013-10-14T17:13:09.137 回答