На вопрос ОП было слишком много возможных ответов, чтобы быть интересным. Начните с echo -e $(cat test.txt).
Томас Дики
Ответы:
10
Я искал решение этого точного вопроса 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')
Хороший ответ, но \aмне звонят. Я изменил вашу вторую команду sed, sed 's/ /\\033\\a /g'которая не звонит в колокол.
Ястреб
1
После дальнейшего тестирования и выявления новых несоответствий в различных терминальных программах (iTerm, Atom / nuclide) я обнаружил, что лучше всего заключить их $(cat file.txt)в двойные кавычки и добавить в конце новую строку - без необходимости в sed - так: echo -ne "$(<file.txt)" \\nили echo -ne "$(cat <<"EOF" . . . EOF)" \\n. Это также препятствует тому, чтобы bash выполнил расширение glob в тексте.
Ястреб
1
Если вы не видите цвет от 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
, например.cat
принте?echo -e $(cat test.txt)
.Ответы:
Я искал решение этого точного вопроса Bash. Я чуть не пропустил комментарий @Thomas Dickey, который дал мне самое элегантное решение.
Некоторые вещи, которые не работали для меня (очевидно, вы не можете передать вещи эхо)
или
Еще одна проблема, с которой я столкнулся, заключалась в том, что echo -e не печатал новые строки и непрерывные пробелы внутри файла. Чтобы распечатать их, я использовал следующее.
Это работает для файла test.txt, содержащего
источник
\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
управляющих символов, вероятно, не повреждены.Некоторые инструменты удаляют управляющие символы, но остаются в хвостовой части.
Для сравнения:
в
Возможно, вам удастся перестроить управляющую последовательность из того, что осталось, хотя это и не доказательство того, что используемое вами регулярное выражение может случайно добавить непреднамеренные последовательности символов и т. Д. Но, например:
восстановил бы цвет к строке примера.
источник
Это должно работать по умолчанию. Например, если я делаю
ls --color=always > /tmp/a
и чемcat /tmp/a
, я вижу цвета. Проверка сod
подтверждает, что файл использует цвета ANSI.Поэтому я думаю, что вы должны проверить, поддерживает ли ваш терминал цвета ANSI (и они включены).
источник