Мне нужен вывод grep с контекстом, цветом и пустыми строками в качестве разделителя групп. В этом вопросе я узнал, как определить custom group-separator
, и я построил свою команду grep следующим образом:
grep --group-separator="" --color=always -A5
но разделитель группы на самом деле не пуст, вместо этого он все еще содержит код цвета (т.е. [[36m[[K[[m[[K
). Это потому что я использую --color=always
. Но мне нужен цвет в моей команде grep и разделитель должен быть пустой строкой (для дальнейшей обработки)
Как я могу объединить эти два условия?
--color=always
совпадение, оно будет напечатано с цветом, и если у вас есть--group-separator=""
набор для пустой строки, вы получите пустую строку после вашей совпадающей группы. Пожалуйста, попробуйте еще раз оставить--group-separator=""
пустую строку, а не конкретный цвет, а затем объясните, что не работает.od -c
чтобы увидеть скрытые символы, которые появляются в пустых строках.od
.Ответы:
Если вы используете
GREP_COLORS
переменную окружения, вы можете управлять определенными цветами для каждого типа соответствия.man grep
объясняет использование переменной.Следующая команда напечатает цветное совпадение, но ничего в строке, разделяющей группу, только пустая строка. Пройдя через канал,
od
вы увидите исчезновение цвета до и после матча, но только\n\n
при разделении группы.Отключение
se
компонента будет подавлять печать цвета в разделителе группы.Так как мой пример выше использовал все значения по умолчанию для
GREP_COLORS
следующего, будет работать также.Если вы не используете
bash
подобную оболочку, вам может понадобитьсяGREP_COLORS
сначала выполнить экспорт .источник
Лично я делаю это, используя Perl, а не
grep
. У меня есть небольшой скрипт, который выделит данный шаблон цветом:Если вы сохраните это в своем пути как
color
, вы можете получить желаемый результат, запустивТаким образом, скрипт раскрашивает спички для вас, и вы можете сказать
grep
не использовать цвета и избежать этой проблемы.источник