2
grep . filename.txt 

Это просто возвращает все содержимое в filename.txt, потому что. является регулярным выражением, которое обозначает любой символ. Как использовать grep для поиска периодов или других регулярных выражений, таких как *?

3 ответа3

10

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

Такие выражения, как *? не являются частью языка регулярных выражений POSIX, который grep использует по умолчанию. Вы можете использовать такие конструкции, указав другой язык регулярных выражений, например, Perl:

$ cat a.txt
aaaaaaaa
aabbccaaaacccccccccb
bbbbbb
$ grep -oP 'a.*?b' a.txt
aab
aaaacccccccccb

Чтобы найти строку, содержащую хотя бы один период, используйте

$ grep '\.*' foo.txt

Для строки, содержащей только точки, используйте

$ grep '^\.*$' foo.txt

Для более сложных регулярных выражений используйте -F:

$ grep -F '[a-z]*.*[AHG].*' foo.txt
[a-z]*.*[AHG].*
5

Вместо этого используйте fgrep если вы хотите искать литералы, а не регулярные выражения.

Если вы просто хотите отключить специальное значение одного из символов регулярного выражения с помощью grep , просто экранируйте его обратной косой чертой, отметив, что если вы набираете это в командной строке, вам может потребоваться "экранировать" «потому что ваша оболочка может раздеть их один слой, прежде чем передать их ребенку.

4

grep -F не будет расширять регулярные выражения. человек grep:

-F, --fixed-strings Интерпретировать PATTERN как список фиксированных строк, разделенных символами новой строки, любой из которых должен соответствовать.

Пожалуйста, обратите внимание, F и не f !

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .