Как включить пробел в grep?

17

У меня есть файл с именем пример

$ 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 

как вывод

Что не так с моей мыслью?

solfish
источник

Ответы:

31

Убедитесь, что вы цитируете свое выражение. Я думаю, что разделение слов в оболочке - одна из ваших проблем, но вы всегда должны цитировать свое регулярное выражение, так как иначе все пойдет не так.

$ grep ' \.pdf' example
grep .pdf

Или если может быть несколько пробелов (мы не можем использовать * поскольку это будет соответствовать случаям, когда нет предыдущих пробелов)

grep ' \+\.pdf' example

+означает «один или несколько из предшествующего символа». В BRE вы должны избежать этого с\ чтобы получить эту специальную функцию, но вместо этого вы можете использовать ERE

grep -E ' +\.pdf' example 

Вы можете также использовать \sв grepдля обозначения места

grep '\s\+\.pdf' example

Мы должны избегать буквального, .потому что в регулярном выражении .означает любой символ, если он не находится в классе символов.

Занна
источник
Вы были первым, кто заметил, что в последней строке есть место.
Pilot6
@ Pilot6 спасибо. Вопрос был немного запутанно написан :)
Zanna
Там должен быть какой-то значок для первого, кто понял вопрос ;-)
Pilot6
@Zanna, есть что-нибудь плохое, чтобы пойти в любое время egrep в этих случаях? egrep всегда дает вам преимущество ...
Solfish
@solfish egrep(с точки зрения стиля регулярных выражений, afaik) - это то же самое grep -E, и я считаю, что мы должны использовать последнее - и egrepт. д. предположительно устарели в пользу grepфлагов России
Zanna