这个grep命令有什么问题?

时间:2019-11-12 14:15:57

标签: linux bash

rpm.txt

Augsburg\n
Bremen\n
Friedrichshafen\n
Aschersleben\n
Bernburg\n
Berlin\n
Halle\n
Essen\n
Furtwangen\n
Kehlen\n
Krumbach\n
Osnabrueck\n
Kempten\n

我的命令:

cat rpm.txt | grep '[^a]'

尽管我已使用grep过滤了所有a项的内容,但返回的文本未更改,为什么?

2 个答案:

答案 0 :(得分:1)

正则表达式中要搜索的模式[^ a]表示该字符设置了除小写字母a之外的所有字符。当您搜索该字符集时,会得到该字符集中具有任何字符的任何行。本质上,您搜索的是除小写字母a之外具有任何字符的任何行。 因此,如果rpm.txt如下

a
aaaaaa
aaaa aaaa
aaaaaaaa1
Augsburg

您的结果应该是

aaaa aaaa
aaaaaaaa1
Augsburg

第一行和第二行只有小写字母a,第三行有空格,第四行有1,最后一行没有小写a。

答案 1 :(得分:0)

您的命令没有错。要了解为什么它不起作用,您首先需要了解regex

您基本上要做的是grep并非小写字母a的所有内容。这意味着,如果您添加-o选项,它将删除该字符。

如果要删除小写字母a的城市,则必须限制包含a的行。为此,您将必须使用字符^$,它们分别是行的开头和行的结尾。此外,您将必须在*之后添加[^a],这意味着字符序列可以包含0..N个字符(其中N> = 0),但不能包含a。 / p>

grep '^[^a]*$' rpm.txt



ps。
您可以使用选项--color=auto。这将以红色显示“抓住”了哪些字符。否则,请尝试使用诸如regex101.com之类的网站。