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

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

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

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

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

решение1

С помощью grepможно использовать:

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

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

$ grep -E 'pattern|$' file

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

$ grep -E 'pattern|^' file

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

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


С less:

$ less -p 'pattern' file

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

решение2

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

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

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

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

или

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

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

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

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

решение3

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

grep -C 5 'MySearchText' *

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

решение4

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

grep -n -C 3  "something"  filename

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

Связанный контент