bash - файла - ls grep




Цветной grep-просмотр всего файла с выделенными совпадениями (11)

Я считаю, что флаг grep --color=always чрезвычайно полезен. Однако grep только печатает строки со спичками (если вы не запрашиваете контекстные строки). Учитывая, что каждая строка, которую он печатает, имеет совпадение, подсветка не добавляет столько возможностей, сколько могла.

Я бы очень хотел, чтобы cat файл и посмотреть весь файл с подсветкой шаблона.

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


В качестве альтернативы вы можете использовать Silver Searcher и делать

ag <search> --passthrough

Вот несколько способов сделать это:

grep --color -E 'pattern|$' file
grep --color 'pattern\|$' file
egrep --color 'pattern|$' file

Вот что-то такое же. Скорее всего, вы все равно будете использовать меньше, поэтому попробуйте следующее:

less -p pattern file

Он будет выделять шаблон и перейти к первому вхождению в файл.


Вы можете использовать мой highlight скрипт из https://github.com/kepkin/dev-shell-essentials

Это лучше, чем grep потому что вы можете выделить каждый матч своим цветом .

$ command_here | highlight green "input" | highlight red "output"


Для этой цели я использую следующую команду:

grep -C 100 searchtext file

Это скажет grep, чтобы напечатать 100 * 2 строки контекста, до и после выделенного текста поиска.


Если вы хотите выделить несколько шаблонов с разными цветами, см. this сценарий bash.

Основное использование:

echo warn error debug info 10 nil | colog

Вы можете изменять шаблоны и цвета во время нажатия одной клавиши, а затем вводить клавишу.


Использовать colout программу: http://nojhan.github.io/colout/

Он предназначен для добавления цветовых оттенков в текстовый поток. Учитывая регулярное выражение и цвет (например, «красный»), он воспроизводит текстовый поток с выделенными совпадениями. например:

# cat logfile but highlight instances of 'ERROR' in red
colout ERROR red <logfile

Вы можете связать несколько вызовов, чтобы добавить несколько разных цветовых оттенков:

tail -f /var/log/nginx/access.log | \
    colout ' 5\d\d ' red | \
    colout ' 4\d\d ' yellow | \
    colout ' 3\d\d ' cyan | \
    colout ' 2\d\d ' green

Или вы можете добиться того же, используя регулярное выражение с N группами (в скобках), а затем список из N цветов, разделенных запятыми.

vagrant status | \
    colout \
        '\''(^.+  running)|(^.+suspended)|(^.+not running)'\'' \
        green,yellow,red

Хорошо, это один из способов,

wc -l filename

даст вам количество строк - скажем, NN, тогда вы можете сделать

grep -C NN --color=always filename

Я бы рекомендовал ack - лучше, чем grep, инструмент поиска мощности для программистов .

$ ack --color --passthru --pager="${PAGER:-less -R}" pattern files
$ ack --color --passthru pattern files | less -R
$ export ACK_PAGER_COLOR="${PAGER:-less -R}"
$ ack --passthru pattern files

Мне нравится, потому что он по умолчанию рекурсивный поиск каталогов (и делает намного умнее, чем grep -r ), поддерживает полные регулярные выражения Perl (а не POSIXish regex(3) ) и имеет гораздо более приятный контекстный дисплей при поиске многих файлов ,


Я добавил это в мои .bash_aliases:

highlight() {
  grep --color -E "$1|\$"
}

другой грязный способ:

grep -A80 -B80 --color FIND_THIS IN_FILE

Я сделал

alias grepa='grep -A80 -B80 --color'

в bashrc.





grep