Простой способ закрасить альтернативные выходные строки в bash - PullRequest
12 голосов
/ 02 декабря 2009

Мне нужно собрать всю директорию для строки, и я получаю около 50 результатов. Я хотел бы покрасить каждую вторую строку, либо цвет текста, либо цвет фона. Лучше всего будет сценарий, к которому я могу направить вывод любой команды и чтобы он выплевывал тот же (хотя и цветной) вывод.

Ответы [ 4 ]

14 голосов
/ 02 декабря 2009

Не очень красиво, но делает трюк:

(сохраните в foo.bash и выполните grep whatever wherever | ./foo.bash)

#!/bin/bash
while read line
do
  echo -e "\e[1;31m$line"
  read line
  echo -e "\e[1;32m$line"
done
echo -en "\e[0m"

Здесь вы можете найти список цветовых кодов в bash .

4 голосов
/ 02 декабря 2009

Perl установлен во многих системах. Вы могли бы иметь его вместо вас:

grep -r whatever somedir/ | perl -pe '$_ = "\033[1;29m$_\033[0m" if($. % 2)'

В Perl $. можно заменить на $INPUT_LINE_NUMBER, если вы предпочитаете удобочитаемость.

2 голосов
/ 02 декабря 2009

Это для обозначения обернутых строк, которые я предполагаю? Этот сценарий оболочки использует цвет фона из палитры 256 color , чтобы не мешать другим выделениям, которые может делать grep --color.

#!/bin/sh
c=0
while read line; do
  [ $(($c%2)) -eq 1 ] && printf "\033[48;5;60m"
  printf "%s\033[0m\n" "$line"
  c=$(($c+1))
done

У этого есть предостережение, которое обратная косая черта и т.д. в пределах линии будет искажено так что воспринимайте это как псевдокод для переопределения

2 голосов
/ 02 декабря 2009

и здесь то же самое в питоне;

import sys
for line_number,line in enumerate(sys.stdin.readlines()):
    print '%s[1;3%dm%s%s[0m' % (chr(27),(line_number % 2+1),line,chr(27)),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...