grep . filename.txt
Это просто возвращает все содержимое в filename.txt, потому что. является регулярным выражением, которое обозначает любой символ. Как использовать grep для поиска периодов или других регулярных выражений, таких как *?
grep . filename.txt
Это просто возвращает все содержимое в filename.txt, потому что. является регулярным выражением, которое обозначает любой символ. Как использовать grep для поиска периодов или других регулярных выражений, таких как *?
По умолчанию 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].*
Вместо этого используйте fgrep
если вы хотите искать литералы, а не регулярные выражения.
Если вы просто хотите отключить специальное значение одного из символов регулярного выражения с помощью grep
, просто экранируйте его обратной косой чертой, отметив, что если вы набираете это в командной строке, вам может потребоваться "экранировать" «потому что ваша оболочка может раздеть их один слой, прежде чем передать их ребенку.
grep -F
не будет расширять регулярные выражения. человек grep:
-F, --fixed-strings Интерпретировать PATTERN как список фиксированных строк, разделенных символами новой строки, любой из которых должен соответствовать.
Пожалуйста, обратите внимание, F
и не f
!