如何使用grep匹配空格或换行符

20

我想在一个文件中用词"AAA" grep ,并且它以空格或换行符结尾。 我知道如何单独编写它们,如下所示,但是在组合它们时遇到了问题(因为它会同时输出 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个回答

23

如果您正在查找字符串中的任意位置或行尾跟随空格的单词AAA,则可以使用以下方法:

grep -P "AAA( |$)"

-P, --perl-regexp 将模式解释为 Perl 兼容的正则表达式(PCRE)。当与 -z(--null-data)选项结合使用时,此选项是实验性的,并且 grep -P 可能会警告未实现的功能。 - tommy.carstensen

13

您可以使用grep的-e选项来选择多个模式:

您可以使用grep的-e选项来选择多个模式:

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.)

2

如果匹配AAA后面跟任何非字母数字字符也可以接受的话,那么请使用"AAA\b"。根据grep手册\b用于匹配单词边界上的空字符串。

$ echo -e "AAA VVV \nVVV AAA\nBBB" | grep "AAA\b"
AAA VVV
VVV AAA

2
使用\b也会匹配输入,例如AAA-BBB - Ωmega

0

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

echo -e "AAA VVV \nVVV AAA\nBBB" | grep "AAA$\|AAA "

在大多数系统中,您需要使用egrep来支持OR正则表达式运算符:egrep $'(AAA|VVV)($|[[:space:]])' - Perette

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接