В bash, если я хочу выполнить команду и отображать только выходные строки, которые соответствуют определенному шаблону, я могу передать его grep
, например,
файл тестового файла
hello
there
my
friends
команда
$ cat testfile | grep 'hello'
hello #this will be highlightd
это выделит совпадение поиска и отобразит всю строку, на которую оно попадает. Я могу использовать -A
и -B
для отображения строк до и после этой строки. Мой вопрос заключается в том, можно ли выполнить команду и отобразить все выходные данные в обычном режиме, но выделять результаты поиска, как это делает grep? так что мой выход будет
hello #highlighted
there
my
friends
linux
command-line
bash
grep
Ewok
источник
источник
Ответы:
Чтобы использовать Color GREP для выделения только совпадающих рисунков, но не для изменения выходных данных:
Первый шаблон будет соответствовать всем строкам (будут напечатаны все строки), а второй шаблон (и любые последующие шаблоны) приведет к тому, что соответствующий текст будет выделен цветом.
Поскольку первый шаблон соответствует всем строкам, но не соответствует печатному символу, он не добавляет никакой цветовой подсветки, поэтому он не конкурирует / не мешает удобочитаемости выделенного текста.
источник
kubectl apply -k . | grep --color=always -e "^" -e "configured"
в Zsh"^"
должен быть второй).Добавьте опцию
-z
к вашей команде GNU grep:или короче
источник
grep --color "hello\|$" file
Как и в предыдущем ответе, вы можете перехватить все
$
концы строк:-E
(или--extended-regexp
) означает, что специальные символы должны быть экранированы\
. При его использовании|
будет рассматриваться как условие регулярного выражения "ИЛИ".Grep
|$
также перехватит и напечатает все строки, которые имеют конец, но поскольку $ является скрытым символом, его нельзя выделить.Обновить:
Если вы хотите распечатать все выходные данные, а также вернуть код завершения , независимо от того, найдено совпадение или нет, вы можете использовать команду perl:
Если вы предпочитаете sed - вот пример, как выделить все совпадения + код возврата, если совпадений не найдено: https://askubuntu.com/a/1200851/670392
источник
Этот работает с GNU grep, а также с grep во FreeBSD:
Соответствует тексту «привет» или (
\|
) непечатаемой пустой строке в конце каждой строки ($
). Вот почему каждая строка печатается, но выделяется только «привет».Скорее всего, вы уже
--color=auto
настроили в своей оболочке. Тогда вам, скорее всего, не нужно указывать--color=always
:Вы также можете упростить версию, используя
egrep
(с расширенными регулярными выражениями), где|
для выражения "или" не нужно экранировать:источник
Добавление к верхнему ответу выше. Функция highlight {}, упомянутая в комментариях, работает только тогда, когда в нее передаются данные. Следующий псевдоним, хотя и не идеальный, более полезен:
Это работает с такими командами, как:
источник