У меня есть файл с цветами ANSI.
test.txt:
\e[0;31mExample\e[0m
Я хотел бы отображать содержимое этого файла в терминале, как это catделает, но я также хотел бы отображать цвета.
catпринте?
echo -e $(cat test.txt).
У меня есть файл с цветами ANSI.
test.txt:
\e[0;31mExample\e[0m
Я хотел бы отображать содержимое этого файла в терминале, как это catделает, но я также хотел бы отображать цвета.
catпринте?
echo -e $(cat test.txt).
Ответы:
Я искал решение этого точного вопроса Bash. Я чуть не пропустил комментарий @Thomas Dickey, который дал мне самое элегантное решение.
echo -e $(cat test.txt)
Некоторые вещи, которые не работали для меня (очевидно, вы не можете передать вещи эхо)
cat test.txt | echo -e
или
less -R test.txt
Еще одна проблема, с которой я столкнулся, заключалась в том, что echo -e не печатал новые строки и непрерывные пробелы внутри файла. Чтобы распечатать их, я использовал следующее.
echo -ne $(cat test.txt | sed 's/$/\\n/' | sed 's/ /\\a /g')
Это работает для файла test.txt, содержащего
\e[0;31mExa mple\e[0m
\e[0;31mExample line2\e[0m
\aмне звонят. Я изменил вашу вторую команду sed, sed 's/ /\\033\\a /g'которая не звонит в колокол.
$(cat file.txt)в двойные кавычки и добавить в конце новую строку - без необходимости в sed - так: echo -ne "$(<file.txt)" \\nили echo -ne "$(cat <<"EOF" . . . EOF)" \\n. Это также препятствует тому, чтобы bash выполнил расширение glob в тексте.
Если вы не видите цвет от catуправляющих символов, вероятно, не повреждены.
Некоторые инструменты удаляют управляющие символы, но остаются в хвостовой части.
Для сравнения:
echo -e "\e[0;31mExample\e[0m foo"
в
echo -e "[0;31mExample[0m foo"
Возможно, вам удастся перестроить управляющую последовательность из того, что осталось, хотя это и не доказательство того, что используемое вами регулярное выражение может случайно добавить непреднамеренные последовательности символов и т. Д. Но, например:
echo -e "[0;31mExample[0m foo" | sed "s:\[\([0-9]*[;m]\):^[[\1:g"
восстановил бы цвет к строке примера.
Это должно работать по умолчанию. Например, если я делаю ls --color=always > /tmp/aи чем cat /tmp/a, я вижу цвета. Проверка с odподтверждает, что файл использует цвета ANSI.
Поэтому я думаю, что вы должны проверить, поддерживает ли ваш терминал цвета ANSI (и они включены).
less -R, например.