Нужна помощь в окраске / замене произвольных строк с использованием Bash и Sed - PullRequest
4 голосов
/ 03 января 2012

Я использую скрипт bash, основанный на технике, использованной здесь: Получение цветного вывода в bash , чтобы раскрасить вывод моих сборок и других сценариев, чтобы упростить чтение.Один из шагов в моей сборке выполняет «git pull», и сервер git выдает строку «welcome», подобную этой, среди множества других выходных данных:

** WARNING: THIS IS A PRIVATE NETWORK.  UNAUTHORIZED ACCESS IS PROHIBITED. **
   Use of this system constitutes your consent to interception, monitoring,
   and recording for official purposes of information related to such use,
   including criminal investigations.

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

WelcomeMessage="WARNING"
pathpat=".*"
ccred=$(echo -e "\033[0;31m")
ccyellow=$(echo -e "\033[0;33m")
ccend=$(echo -e "\033[0m")
git pull 2>&1 | sed -r -e "/$WelcomeMessage/ s%$pathpat%$ccyellow&$ccend%g"

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

WelcomeMessage="** WARNING: THIS IS A PRIVATE NETWORK.  UNAUTHORIZED ACCESS IS PROHIBITED. **
   Use of this system constitutes your consent to interception, monitoring,
   and recording for official purposes of information related to such use,
   including criminal investigations."
pathpat=".*"
ccred=$(echo -e "\033[0;31m")
ccyellow=$(echo -e "\033[0;33m")
ccend=$(echo -e "\033[0m")
git pull 2>&1 | sed -r -e "/$WelcomeMessage/ s%$pathpat%$ccyellow&$ccend%g"

Это не с ошибкой: sed: -e выражение # 1, char78: регулярное выражение с неопределенным адресом

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

Любая помощь приветствуется.Спасибо!

1 Ответ

2 голосов
/ 04 января 2012

Следующее будет окрашиваться в желтый цвет каждой строки от первого экземпляра ** до первого экземпляра периода . , который не находится на одной строке Это будет соответствовать всему предупреждающему сообщению, как написано.

NORMAL=$(tput sgr0)
YELLOW=$(tput setaf 3)

git pull 2>&1 | sed "/\*\*/,/\./s/.*/$YELLOW&$NORMAL/"

Примечание : если вы хотите удалить сообщение, вы можете использовать это:

git pull 2>&1 | sed '/\*\*/,/\./d'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...