Мне нужно найти текст в одном или нескольких файлах.
Это то, что я использую:
grep -irI "hello" ~/
Однако, если я хочу найти строку, содержащую символы, такие как *
или _
, то они, похоже, игнорируются.
Допустим, я хочу искать во всех файлах строку a**__
.
Как я могу это сделать? Большое спасибо - я просто не могу понять это!
Существует опция -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**__
Необходимо использовать символ ESC (\
) перед *
потому что иначе Ваша строка для поиска будет, стал регулярным выражением.
Например, если Вы хотите искать **__
, можно использовать:
grep -irI "\*\*__" ~/
Больше о: В регулярном выражении, для каких символов нужен выход?.
Простая двойная кавычка (" ") с символом ESC ('\') сделает задание.
, например, если я хочу искать ind*x.html от текущей папки, я буду использовать:
grep -r "ind\*x.html" ./
Примечание: Если Вы не используете без кавычек затем, необходимо использовать две обратных косых черты.
grep -r ind\\*x.html ./
Оба будут искать термин ind*x.html в файлах.