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

У меня есть файл, названный примером

$ 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 

как произведено

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

14
задан 24 August 2017 в 00:41

1 ответ

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

$ grep ' \.pdf' example
grep .pdf

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

grep ' \+\.pdf' example

+ означает "один или несколько из предшествующего символа". В BRE необходимо выйти из него с \ для получения этой специальной функции но можно использовать ДО вместо этого для предотвращения этого

grep -E ' +\.pdf' example 

Можно также использовать \s в grep означать пространство

grep '\s\+\.pdf' example

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

28
ответ дан 23 November 2019 в 02:55

Другие вопросы по тегам:

Похожие вопросы: