6

Как я могу настроить grep так, чтобы я мог выделить более умные цвета? Используя разные цвета?

Проблема: grep --color умолчанию использует красный для выделения совпадений, но его все равно трудно читать для последовательных прогонов. Если я запускаю grep три раза, я бы хотел, чтобы в первом запуске использовался красный, во втором - другой цвет (скажем, зеленый), в третьем - снова красный и т.д.

Я читал до того, как взломать обмен цвета в терминале при каждом запуске, чтобы вывод был чистым и легче читался. Но я забываю, что это такое; это zsh или bash-script или какая-то другая оболочка?

4 ответа4

3

Вы можете добавить следующее в ваш файл .bashrc :

my_grep() {
  if $GREP_USE_FIRST_COLOR
  then
    export GREP_USE_FIRST_COLOR=false
    export GREP_COLORS='ms=01;31:mc=01;31:sl=:cx=:fn=35:ln=32:bn=32:se=36'
  else
    export GREP_USE_FIRST_COLOR=true
    export GREP_COLORS='ms=01;33:mc=01;33:sl=:cx=:fn=35:ln=32:bn=32:se=36'
  fi
  grep --color=auto "$@"
}
alias grep=my_grep

Это изменит цвет выделения совпадений для последующих вызовов grep в интерактивной оболочке между жирным красным (ms=01;31) и желтым (ms=01;33).

См. Руководство grep для получения дополнительной информации о том, как использовать GREP_COLORS чтобы установить конкретные цвета подсветки, которые вам нравятся.

0

Это адаптация решения Kimvais (которое также использовал Unrealist ).  Создать grepc.bash:

while read line
do
     echo "$line"
     read line && echo "$line" | sed $'s/\(\e\[\([0-9]+;\))*\)31m/\\132m/g'
done

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

grep --color=always (whatever) (whatever) | (path to the script)/grepc.bash

Кажется, что grep --color самом деле использует цвет, только если он пишет в терминал (окно), и вам нужно использовать =always чтобы заставить его использовать цвет при записи в канал.  И кстати, принято помещать такие личные утилиты в ~/bin , а затем добавлять их в свой PATH, поэтому вам не нужно указывать их при запуске утилиты.

0

Вдохновленный ответом @Chriki

Используя PROMPT_COMMAND в качестве ловушки, обновляйте GREP_COLOR и git config для каждого запроса.

# .bashrc
# ...
# your alias, git prompt, git completetion, exports... etc
# ...
__grep_swap_color ()
{
  if [ -z "$GREP_COLOR" ]
  then
    export GREP_COLOR='1;32'
    git config --global color.grep.match blue
  else
    export GREP_COLOR=''
    git config --global color.grep.match red
  fi
}
PROMPT_COMMAND=$PROMPT_COMMAND';__grep_swap_color'
# End of file
0

Вы ищете простой способ закрасить альтернативные выходные строки в bash.

Если ответ кажется немного запутанным, следуйте этому.

  1. Вы должны использовать скрипт, который автоматически сделает это за вас. Откройте "терминал". (Во многих вариациях Ubuntu и сам по себе вы нажимаете Alt+Ctrl+T, чтобы вызвать это.) Я предполагаю, что вы используете Ubuntu.
  2. Используйте ваш любимый редактор, чтобы открыть текстовый файл для написания сценария. Я использую "нано". Как этот nano ~/grepc.sh . Это открывает файл с именем grepc.sh в моем /home (~/).
  3. Вставьте этот скрипт bash в это.

    #!/bin/sh
    while read line
    do
      echo -e '\e[1;31m'"$line"
      read line
      echo -e '\e[1;32m'"$line"
    done
    echo -en '\e[0m'
    
  4. Если вы находитесь в nano, нажатие Ctrl+X попытается закрыть nano, но перед этим он спросит, хотите ли вы сохранить файл. Сделайте это, нажав клавишу y на клавиатуре.

  5. Теперь вы должны сделать этот скрипт исполняемым. Введите команду chmod +x ~/grepc.sh .
  6. Вот и все. Теперь используйте это с такими командами grep: ls ~/ | grep "test" | ./grepc.sh (при условии, что команда выполняется в /home).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .