Сохранение вывода grep в файл с цветами
Мне нужно сохранить результат команды grep в файл, но я также хочу, чтобы выходной файл был отформатирован и сохранял цвета, как в терминале.
Есть способ сделать это? Может быть, заставить grep сохранить какой-нибудь язык разметки? Если это невозможно, есть ли другой инструмент, который может выполнить эту задачу?
Я пытаюсь выделить ключевое слово поиска в выходном файле, точно так же, как в терминале.
4 ответа
Чтобы сохранить разметку, вам нужно больше, чем просто текстовый файл. Я бы использовал вывод HTML, чтобы сохранить цвета.
Установите aha, т. Е. Чтобы "преобразовать escape-последовательности ANSI терминала unix в код HTML "
sudo apt-get install aha
затем сохраните
grep
(или жеls
) выводится так:ls --color=always | aha --black --title 'ls-with-colors' > ls-with-colors.html
опции:
--black param to set background as black color --title param to set the title for HTML page
Подсветка синтаксиса для расширения файла через pygmentize
устанавливать
pygmentize
:sudo apt-get install python-pygments
затем выполните команду такого типа:
pygmentize file.pl | grep -i --color=always version | aha --black > ls-with-colors.html
В зависимости от того, что вы хотите сделать с выходным файлом, можно добавить цвета в обычный текстовый файл, потому что цвета просто берутся из некоторых специальных символов. Grep, похоже, не хочет печатать их, когда вы перенаправляете его в файл, поэтому вам нужно принудительно заставить его:
grep --color=always "stuff" input.txt > output.txt
Теперь, когда вы печатаете файл на консоль, он будет напечатан с цветами, потому что Bash интерпретирует эти символы как "используйте этот цвет".
cat output.txt
Тем не менее, если вы откроете его в редакторе, как vim
Вы получите несколько странных персонажей. Например, когда я использую команды
echo "A sentence. A red sentence. Another sentence." \
| grep --color=always "A red sentence" > output.txt
Вывод выглядит правильно, когда я печатаю его, используя cat
но когда я открываю его в vim
я получил
A sentence. ^[[01;31m^[[KA red sentence^[[m^[[K. Another sentence.
Так что, если вы хотите использовать редактор, это, вероятно, не то, что вы хотите.
Если я правильно понял, вы хотите сохранить вывод терминала в текстовом файле, верно? Но вы хотите, чтобы он был отформатирован с цветами. Если это так, вот мои идеи:
Подсветка вывода автоматически
Как вы, вероятно, знаете, если вы записываете вывод grep в текстовый файл, именно потому, что это текстовый файл, его невозможно отформатировать. Итак, насколько я знаю, вы не можете сделать это простым способом.
Несмотря на это, существует простой обходной путь, заключающийся в том, чтобы заставить ваш текстовый редактор понять, какой тип файла открывается. Например, предположим, что ваш вывод grep имеет некоторые компоненты bash, поэтому подсветка bash работает для вас (кстати, это часто те цвета, которые вы видите в цветном выводе в терминале). Таким образом, хитрость заключается в том, чтобы сохранить вывод текста в файл с соответствующим расширением. Вместо того, чтобы делать что-то вроде:
ls | grep something > output
вы можете пойти на
ls | grep something > output.sh
Что заставит gedit (или любой приличный текстовый редактор) автоматически распознать, что вы говорите о bash-коде, и выделит его соответствующим образом. Вам не нужно окрашивать вывод, программа сделает это за вас, если распознает тип открываемого кода. Если вы работаете с другими типами форматов, просто лучше приспособьте расширение к тому, что вы настраиваете для того, что вы делаете (например,> output.xml, > output.html, > output.py ... и т. Д.). Удачи!:)
Выделение некоторых слов в выходном файле
Итак, если я понял, вы хотите выделить слова, которые вы искали. Опять же, это не может быть сделано в текстовом файле только потому, что это простой текст. Однако вы можете добавить какой-либо формат к нему очень простым способом, например с использованием некоторого HTML-кодирования. Это преобразует ваш вывод в html-код, и когда вы откроете его с помощью программы, способной интерпретировать html (libreoffice writer, firefox и 10000 и т. Д.), Вы увидите выделенные слова.
Для этого допустим, что это ваш grep, экспортированный в html:
ls | grep keytext > output.html
И теперь вы хотите выделить ключевой текст в вашем выводе. Вы можете использовать sed, чтобы сделать это, например:
sed -i 's/keytext/<font color="red">keytext<\/font>/g' output.html
И вот, теперь ваш ключевой текст выделен красным.
выберите содержимое терминала и щелкните правой кнопкой мыши внутри терминала. В опциях вы можете найти «копировать как HTML». Выберите параметр и вставьте скопированное содержимое в файл и сохраните его как файл html. открытие html-файла с помощью любых html-рендереров (например, браузера). Вам будет представлено то же содержимое и цвета, что и на вашем терминале. протестировано и проверено в Ubuntu 20.04 LTS.