Как искать слово в файле, но также отображать весь файл вместе с найденным словом?

Я использую Ubuntu 16.04.

Я хочу найти определенное слово, но я также хочу, чтобы весь файл, содержащий слово, выводился на терминал, чтобы я мог видеть, где в файле находится слово. Однако, когда я использую grep , он показывает только конкретное предложение, содержащее слово, а не весь файл.

Какую команду я могу использовать для поиска слова, но также и для отображения всего файла вместе с местом, где находится слово?

2
задан 10 August 2020 в 01:14

4 ответа

С grep вы можете использовать:

$ grep -E -e 'pattern' -e '$' file

или в упрощенной форме:

$ grep -E 'pattern|$' file

Технически это тоже будет работать:

$ grep -E 'pattern|^' file

или даже: grep -E 'шаблон |' Файл . Он говорит строки с шаблоном или вообще без шаблона. так что все будет совпадать.

У меня grep псевдоним grep --color = always , поэтому, если вы этого не сделаете, вам придется передавать параметр цвета самостоятельно.


С less :

$ less -p 'pattern' file

Таким образом, файл будет всплывать в меньше, желаемый термин будет выделен, и вы можете использовать n и shift + n , чтобы переключаться между матчами.

8
ответ дан 11 August 2020 в 20:07

В дополнение к другим ответам: вы можете добавить '-n' к параметрам, чтобы увидеть номера строк слева:

grep -n -C 3  "something"  filename

покажет вам строки, содержащие "что-то", с 3 строками «Контекст» (т. е. 3 строки до и после строки, совпадающей с «чем-то»), и каждая показанная строка будет иметь номер строки, добавленный в начале.

0
ответ дан 11 August 2020 в 20:07

Если вы хотите увидеть, где в файле находится искомый текст, используйте флаг C. Например:

grep -C 5 'MySearchText' *

покажет строку, содержащую текст, а также пять строк до и пять строк после предполагаемого поиска.

2
ответ дан 11 August 2020 в 20:07

Изменить: я неверно истолковал вопрос в моем первоначальном ответе .... Я отредактировал его, чтобы получить желаемый результат ... Я показывал только имя файла на выходе. Я отредактировал этот ответ, чтобы использовать этот вывод для отображения всего файла с помощью less (как предполагает ответ Равексины)
... кроме того, это вернет только те файлы (в меньше ), которые были сопоставлены с помощью grep при поиске в каталоге (ах).
.... и я добавил -I , чтобы игнорировать двоичные файлы, они могут сделать взаимодействие меньше беспорядочным. Удалите его, если вам нужно искать двоичные файлы или файлы, которые grep может "считать" двоичными.

Используйте флаг "with-filename" с grep, чтобы показать файл. (флаг -H )

Я предполагаю, что вы просматриваете каталог и каждый из файлов в них. При поиске вне текущего каталога используйте * для предотвращения безрезультатной ошибки «это каталог»

grep -HI pattern / directory / * | less -p шаблон $ (awk -F ":" '{print $ 1}')

или

grep --with-filename -I pattern / directory / * | less -p pattern $ (awk -F ":" '{print $ 1}')

или при переходе к подкаталогам ...

grep -rHI шаблон / каталог / * | less -p pattern $ (awk -F ":" '{print $ 1}')

Мне не нравится вводить шаблон дважды, для этого можно улучшить

4
ответ дан 11 August 2020 в 20:07

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

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