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

sol*_*ish 24 command-line regex grep

我有一个名为 example 的文件

$ cat example

kali.pdf
linux.pdf
ubuntu.pdf
example.pdf.
this.pdf
grep .pdf
Run Code Online (Sandbox Code Playgroud)

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

grep *.pdf example
Run Code Online (Sandbox Code Playgroud)

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

如果我使用:

grep i*.pdf example

kali.pdf
linux.pdf
ubuntu.pdf
example.pdf.
this.pdf
grep .pdf
Run Code Online (Sandbox Code Playgroud)

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

最后:

grep " *.pdf" example
Run Code Online (Sandbox Code Playgroud)

没有结果返回

对于这个样本,我想看看

grep .pdf 
Run Code Online (Sandbox Code Playgroud)

作为输出

我的想法有什么问题?

Zan*_*nna 38

确保你引用你的表达。

$ grep ' \.pdf' example
grep .pdf
Run Code Online (Sandbox Code Playgroud)

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

grep ' \+\.pdf' example
Run Code Online (Sandbox Code Playgroud)

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

grep -E ' +\.pdf' example 
Run Code Online (Sandbox Code Playgroud)

你也可以用\singrep来表示一个空格

grep '\s\+\.pdf' example
Run Code Online (Sandbox Code Playgroud)

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