У мене файл з кольорами 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).
Відповіді:
Я шукав рішення цього точного баш-питання. Я ледь не пропустив коментар @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 виконувати глобальне розширення в тексті.
Якщо ви не бачите колір 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, наприклад,