Как использовать 'grep' с такими символами, как * и _?

Мне нужно найти текст в одном или нескольких файлах.

Это то, что я использую:

grep -irI "hello" ~/

Однако, если я хочу найти строку, содержащую символы, такие как * или _, то они, похоже, игнорируются.

Допустим, я хочу искать во всех файлах строку a**__.

Как я могу это сделать? Большое спасибо - я просто не могу понять это!

2
задан 22 October 2013 в 19:20

3 ответа

Существует опция -F:

-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched.  (-F is specified by POSIX.)

Это отключит поиск по регулярным выражениям и интерпретацию символов, таких как * или .. Пример:

$ cat test 
a**__
$ grep -F 'a**__' test 
a**__
0
ответ дан 22 October 2013 в 19:20

Необходимо использовать символ ESC (\) перед * потому что иначе Ваша строка для поиска будет, стал регулярным выражением.

Например, если Вы хотите искать **__, можно использовать:

 grep -irI "\*\*__" ~/

Больше о: В регулярном выражении, для каких символов нужен выход?.

0
ответ дан 22 October 2013 в 19:20

Простая двойная кавычка (" ") с символом ESC ('\') сделает задание.

, например, если я хочу искать ind*x.html от текущей папки, я буду использовать:

grep -r "ind\*x.html" ./

Примечание: Если Вы не используете без кавычек затем, необходимо использовать две обратных косых черты.

grep -r ind\\*x.html ./

Оба будут искать термин ind*x.html в файлах.

0
ответ дан 9 October 2019 в 14:29

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

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