Использование команды столбца для результата tput через bash - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть переменная "x", которая содержит два столбца и две строки.Я хотел напечатать «привет» красным цветом, поэтому я воспользовался tput, который напечатал результат красным.Но мне также нужно было напечатать столбцы в правильном выравнивании, для этого я использовал column -t, но это искажает вывод.Это было связано с тем, что некоторые контрольные символы добавляются tput.

x="hello $(tput setaf 1)hi $(tput sgr0) whatsup
hey howdy cya"


echo "$x"
hello hi  whatsup
hey howdy cya

echo "$x"|column -t
hello  hi              whatsup
hey    howdy  cya

Я ожидал:

hello  hi     whatsup
hey    howdy  cya

Попытался отладить, обнаружил, что tput добавляет некоторые контрольные символы, чтобы "hi" печатал красным.

echo "$x"|cat -A
hello ^[[31mhi ^[(B^[[m whatsup$
hey howdy cya$

Вопрос:

Как "column -t" на цветной вывод из tput?

РЕДАКТИРОВАТЬ: Результат (ВСЕ В КРАСНОМ) от @Diego Torres Milano

hello  31mhi  Bm  whatsup
hey    howdy   cya

1 Ответ

0 голосов
/ 14 декабря 2018

Вы можете использовать своего рода упрощенную разметку , в данном случае ^A для своего красного (чтобы ввести его, используя vim тип CTRL + v CTRL + a )

y="hello ^Ahi whatsup
hey howdy ya"

echo "$y"|column -t|sed -E "s@^A([[:alnum:]]+)@$(tput setaf 1)\1$(tput sgr0)@g"

, и результат соответствует ожидаемому (привет красным):

hello  hi     whatsup
hey    howdy  ya

EDIT

, если ваш column считает контрольные символы, затем используйте любой символ, который не отображается в ваших значениях, а затем замените их, например

y="|hello !hi |whatsup
|hey |howdy |ya"

echo "$y"|column -t|sed -E "s@\\|@@g; s@!([[:alnum:]]+)@$(tput setaf 1)\1$(tput sgr0)@g;"

, который производит

column color

...