如何在grep中包含空格字符?


17

我有一个名为example的文件

$ cat example

kali.pdf
linux.pdf
ubuntu.pdf
example.pdf.
this.pdf
grep .pdf

当我grep用来获取之前有空格的行时.pdf,我似乎无法获取。

grep *.pdf example

不返回任何内容,(我想说“ grep,在.pdf” 之前匹配零个或多个空格,但没有结果)

如果我使用:

grep i*.pdf example

kali.pdf
linux.pdf
ubuntu.pdf
example.pdf.
this.pdf
grep .pdf

所有行都返回,因为我说的是“ grep,匹配我i一次或零次,好的。”

最后:

grep " *.pdf" example

没有结果返回

对于这个样本,我想看看

grep .pdf 

作为输出

我的想法怎么了?

Answers:


31

确保引用您的表情。我认为shell拆分是您的问题之一,但是您应始终引用正则表达式,否则所有事情都会出错。

$ grep ' \.pdf' example
grep .pdf

或者,如果可能有多个空格(我们不能使用,*因为这将与前面没有空格的情况相匹配)

grep ' \+\.pdf' example

+表示“一个或多个前面的字符”。在BRE中,您需要对其进行转义\以获取此特殊功能,但可以使用ERE来避免这种情况

grep -E ' +\.pdf' example 

您还可以使用\sgrep指一种空间

grep '\s\+\.pdf' example

我们应该转义文字,.因为在正则表达式中.表示任何字符,除非它在字符类中。


您是第一个注意到最后一行有空格的人。
飞行员

@ Pilot6谢谢。这个问题写得有点混乱:)
Zanna

对于第一个了解该问题的人,应该有一些徽章;-)
飞行员

@Zanna,在这种情况下,egrep随时可以出错吗?egrep总是会让您
受益

@solfish egrep(就正则表达式而言,afaik)与相同grep -E,并且我相信我们egrep应该使用后者- 据说已弃用赞成grep的旗帜
Zanna
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.