19

我想用一个单词 grep 一个文件,比如“AAA”,它以空格或换行符结尾。我知道如何单独编写它,如下所示,但是在组合它们时遇到问题(从某种意义上说,它同时输出VVV AAAAAA VVV)。

$echo -e "AAA VVV \nVVV AAA\nBBB" | grep "AAA$" 
>VVV AAA
$echo -e "AAA VVV \nVVV AAA\nBBB" | grep "AAA[[:space:]]" 
>AAA VVV 

我试过使用[],但没有成功..

4

4 回答 4

22

如果您要AAA在字符串中的任何位置或行尾查找单词后跟空格,请使用

grep -P "AAA( |$)"
于 2012-11-04T16:00:40.430 回答
12

您可以使用-egrep 的选项来选择多种模式:

grep -e "AAA$" -e "AAA[[:space:]]"

来自 grep 人:

-e PATTERN, --regexp=PATTERN
      Use  PATTERN  as  the  pattern.   This  can  be  used to specify
      multiple search patterns, or to protect a pattern beginning with
      a hyphen (-).  (-e is specified by POSIX.)
于 2012-11-04T20:46:48.567 回答
2

如果"AAA\b"也可以匹配 AAA 后跟任何其他非字母数字字符,则使用此选项。根据grep man pages\b匹配单词边缘的空字符串。

$ echo -e "AAA VVV \nVVV AAA\nBBB" | grep "AAA\b"
AAA VVV
VVV AAA
于 2012-11-04T16:05:30.647 回答
0

我认为我们也可以将默认 grep 与 OR(\|) 一起使用

echo -e "AAA VVV \nVVV AAA\nBBB" | grep "AAA$\|AAA "
于 2021-02-19T19:42:39.727 回答