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
出力として
私の考えの何が問題になっていますか?
必ず式を引用してください。ここではシェルの単語分割が問題の1つであると思いますが、そうでない場合はすべての種類の問題が発生するため、常に正規表現を引用する必要があります。
$ grep ' \.pdf' example
grep .pdf
または、複数のスペースが存在する可能性がある場合(*
は使用できません。前にスペースがない場合に一致するためです)
grep ' \+\.pdf' example
+
は、「1つ以上の先行文字」を意味します。 BREでは、\
でエスケープしてこの特別な関数を取得する必要がありますが、代わりにEREを使用してこれを回避することができます
grep -E ' +\.pdf' example
grep
で\s
を使用してスペースを意味することもできます
grep '\s\+\.pdf' example
正規表現では.
は文字クラスを除き、任意の文字を意味するため、リテラル.
をエスケープする必要があります。