расположенный каскадом grep соответствует цветовому коду как шаблону

В Полночь Командующий переходит к меню параметров / Конфигурация... управляет / Использование внутренний флажок редактирования и сняла флажок с ним. (Не забывайте выполнять команду установки Сохранения, если Автоматическая опция настройки сохранения выключена.)

Затем установите EDITOR переменная среды для Сублимации. Можно предпочесть добавлять один из них к файлу ресурсов оболочки:

  • Глобальная установка для всех программ то использование EDITOR (не рекомендуемый):

    EDITOR=sublime
    export EDITOR
    
  • Временная установка для данного Полуночного Командующего сессия только:

    alias mc='EDITOR=sublime mc'
    

То же для средства просмотра, просто Вы сняли флажок с Использованием внутренняя опция представления и устанавливаете VIEWER переменная среды вместо этого.

5
03.03.2018, 05:08
3 ответа

Именно поэтому --color по умолчанию имеет значение --color=auto, а не --color=always.

Если ваша цель - "Показать мне все строки, которые содержат оба символа A и m и выделить соответствующие A и m", то кажется, что простейшим решением было бы сделать всю подсветку после всех совпадений, используя один пример, чтобы добавить подсветку обратно. Что-то вроде:

{
    echo "A b";
    echo "A m";
    echo "B m";
    echo "Another m";
} | grep 'A' | grep 'm' | egrep --color 'A|m';
3
27.01.2020, 20:34

Не используйте grep --color=всегда, именно поэтому в GNU grep (а может быть и в других) также есть grep --color=авто, что эквивалентно grep --color только (от man grep):

   --color[=WHEN], --colour[=WHEN]
          Surround  the  matched  (non-empty)  strings,  matching   lines,
          context  lines,  file  names,  line  numbers,  byte offsets, and
          separators (for fields and groups of context lines) with  escape
          sequences  to display them in color on the terminal.  The colors
          are  defined  by  the  environment  variable  GREP_COLORS.   The
          deprecated  environment  variable GREP_COLOR is still supported,
          but its setting does not have priority.  WHEN is never,  always,
          or auto.

Я не могу найти, где это задокументировано более подробно, но в основном определяет, является ли вывод grep файлом, или терминалом, или трубой, или чем-то еще и действует соответствующим образом:

$ echo foo | grep --color=always o | grep m
f[01;31mo[m[01;31mo[m
$ echo foo | grep --color=always o >outfile; grep m outfile
f[01;31mo[m[01;31mo[m

Сравните вышеизложенное с

$ echo foo | grep --color o >outfile; grep m outfile
$ echo foo | grep --color o | grep m 
$ 

Таким образом, используя опцию auto, в основном, вы сможете распечатать цвета только тогда, когда вы их видите. Это действительно очень умно и работает как очарование. Настолько, что у меня есть:

$ type grep
grep is aliased to `grep --color'
6
27.01.2020, 20:34

Каков реальный случай использования? Если вы хотите раскрасить код A во всех строках, которые также содержат m, вы можете просто перевернуть greps:

echo A B C | grep m | grep --color=always A

Или, если вы ищете буквальный m в оригинальном выводе, вам нужно исключить все коды цвета до grep m, но распечатать результат с помощью цветовых кодов. Один из способов сделать это - использовать nl для нумерации строк вывода, grep для номера строки, за которым следует m, сохранить только номера строк из этого вывода, а затем использовать sed -n для вывода только строк с цветовой кодировкой.

.
2
27.01.2020, 20:34

Теги

Похожие вопросы