Я использую Ubuntu 16.04.
Я хочу найти определенное слово, но я также хочу, чтобы весь файл, содержащий слово, выводился на терминал, чтобы я мог видеть, где в файле находится слово. Однако, когда я использую grep
, он показывает только конкретное предложение, содержащее слово, а не весь файл.
Какую команду я могу использовать для поиска слова, но также и для отображения всего файла вместе с местом, где находится слово?
С 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 , чтобы переключаться между матчами.
В дополнение к другим ответам: вы можете добавить '-n' к параметрам, чтобы увидеть номера строк слева:
grep -n -C 3 "something" filename
покажет вам строки, содержащие "что-то", с 3 строками «Контекст» (т. е. 3 строки до и после строки, совпадающей с «чем-то»), и каждая показанная строка будет иметь номер строки, добавленный в начале.
Если вы хотите увидеть, где в файле находится искомый текст, используйте флаг C. Например:
grep -C 5 'MySearchText' *
покажет строку, содержащую текст, а также пять строк до и пять строк после предполагаемого поиска.
Изменить: я неверно истолковал вопрос в моем первоначальном ответе .... Я отредактировал его, чтобы получить желаемый результат ...
Я показывал только имя файла на выходе. Я отредактировал этот ответ, чтобы использовать этот вывод для отображения всего файла с помощью 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}')
Мне не нравится вводить шаблон дважды, для этого можно улучшить