grepにスペース文字を含める方法は?


17

exampleという名前のファイルがあります

$ cat example

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

grep.pdfにスペースのある行を取得するために使用すると、取得できないようです。

grep *.pdf example

何も返しません(「grep、前に0個以上のスペースがあります」と言いたいのです.pdfが、結果はありません)

そして私が使用する場合:

grep i*.pdf example

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

「grep、i1回または0回一致します」と言っているため、すべての行が返されます。

そして最後に:

grep " *.pdf" example

結果は返されません

このサンプルでは、​​見たい

grep .pdf 

出力として

私の考えの何が問題になっていますか?

回答:


31

必ず式を引用してください。ここではシェルの単語分割が問題の1つであると思いますが、そうでない場合はすべての種類の問題が発生するため、常に正規表現を引用する必要があります。

$ grep ' \.pdf' example
grep .pdf

または、複数のスペースがある可能性がある場合(*これは、先行するスペースがない場合に一致するため使用できません)

grep ' \+\.pdf' example

+「1つ以上の先行文字」を意味します。BRE \では、この特別な関数を取得するためにエスケープする必要がありますが、代わりにEREを使用してこれを回避することができます

grep -E ' +\.pdf' example 

\sin grepを使用してスペースを意味することもできます

grep '\s\+\.pdf' example

.正規表現で.は任意の文字を意味するため、リテラルをエスケープする必要があります(文字クラスに含まれている場合を除く)。


あなたは、最後の行にスペースがあることに気づいた最初の人でした。
Pilot6

@ Pilot6ありがとう。質問は少し混乱して書かれていました:)
Zanna

質問を最初に理解した人にはバッジが必要です;-)
Pilot6

@Zanna、この場合、いつでもegrepを実行するのは間違っていますか?egrepは常にあなたに有利になります
...-solfish

@solfishはegrep(私の知る限りで、正規表現スタイルの面で)と同じであるgrep -E、と私は信じている我々は後者を使用するように意図されている- egrepなどおそらくのために廃止されているgrepの旗
Zanna
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.