web-dev-qa-db-ja.com

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

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

$ cat example

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

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

grep *.pdf example

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

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

grep i*.pdf example

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

「grep、match me i one or zero times、ok。」と言っているので、すべての行が返されます。

そして最後に:

grep " *.pdf" example

結果は返されません

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

grep .pdf 

出力として

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

11
solfish

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

$ grep ' \.pdf' example
grep .pdf

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

grep ' \+\.pdf' example

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

grep -E ' +\.pdf' example 

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

grep '\s\+\.pdf' example

正規表現では.は文字クラスを除き、任意の文字を意味するため、リテラル.をエスケープする必要があります。

23
Zanna