2013-03-22 2 views
4

Я обрабатываю входные данные (из таких источников, как, например, ls -la --color) и подчеркивая некоторые разделы текста. Я не обрабатываю эти входы по-символам, но с большим количеством регулярных выражений, что затрудняет отслеживание того, что подстрока, на которую я влияю, уже окрашена или выделена жирным шрифтом. Если у меня есть красный блок текста, и я хочу, чтобы подчеркнуть какую-то часть его, я мог бы сделать что-то вроде:.В xterm можно отключить полужирный или подчеркивание без сброса текущего цвета?

s/(123)/\033[4m\1\033[0m/g 

(Мои выражения являются гораздо более сложными В действительности, спички добыты, обработаны самостоятельно , и дальше разбивать и анализировать. Это не то, что можно сделать, изменив выражение, которое я здесь привел.)

В приведенном выше коде были бы заменены все сообщения 123 с помощью [UNDERLINE_START] 123 [FORMAT_RESET]. К сожалению, сброс также отключает окраску текста. Это избавило бы меня от большой головной боли, если бы я мог просто отключить подчеркивание, когда это все, что я хочу отключить, но я уверен, что нет никакого способа сделать это. Может ли кто-нибудь сказать мне, что я неправ?

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

ответ

3

Никто, кажется, документировать, но добавление 20 к кодам декоратор превратит их:

echo -e "\\033[34;4m" underlined "\\033[24m" not underlined 
    echo -e "\\033[34;1m" bold "\\033[2m" not bold 
    echo -e "\\033[34;2m" dark "\\033[22m" not dark 
    echo -e "\\033[34;7m" inverse "\\033[27m" not inverse 
+1

http://en.wikipedia.org/wiki/ANSI_escape_code#CSI_codes – chepner

+0

Подождите .. как делает 1 перейдите к 2? Все остальные следуют вашему правилу 20. – mpen

+1

'2' для тусклого цвета, не отключая жирный шрифт. '22' предназначен для отключения dim ** и ** жирным шрифтом. Отключение полужирного шрифта с помощью '21' не поддерживается широко (например, нет поддержки в macOS). – Rockallite