Сохранение вывода grep в файл с цветами

Я должен сохранить результат команды grep в файл, но я также хочу, чтобы выходной файл был отформатирован и сохранил цвета точно так же, как в терминале.

Существует ли способ сделать это? Возможно, заставьте grep сохранить на некоторый язык разметки? Если это не возможно, там другой инструмент, который может выполнить эту задачу?

Я пытаюсь заставить поисковое ключевое слово выделиться в выходном файле, точно как он делает в терминале.

36
задан 22 May 2018 в 03:56

3 ответа

Для хранения разметки Вам нужны больше, чем просто текстовый файл. Я использовал бы вывод HTML для хранения цветов.

  • Установка ага т.е. к "преобразовывает 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
    

enter image description here

42
ответ дан 23 November 2019 в 00:21

Если я понял правильно, что Вы хотите сохранить терминальный вывод в текстовом файле, правильно? Но Вы хотите, чтобы это было отформатировано с цветами. Если это так, вот мои идеи:

Выделение вывода автоматически

Как Вы, вероятно, знаете при получении вывода grep в текстовый файл, точно потому что это - текстовый файл, он не может быть форматирован. Так, насколько я знаю, Вы не можете сделать этого в простом способе.

Несмотря на это существует простое обходное решение, состоять в создании понимает Ваш текстовый редактор, какой файл открывается. Например, скажем, то, что Ваш вывод grep имеет некоторые компоненты удара, таким образом, работы выделений удара для Вас (между прочим, это часто цвета, которые Вы видите в цветном выводе в терминале). Таким образом, прием должен сохранить текстовый вывод в файле с надлежащим расширением. Вместо того, чтобы делать что-то как:

ls | grep something > output

можно пойти для

ls | grep something > output.sh

Который сделает gedit (или любой достойный текстовый редактор) автоматически распознают, что Вы говорите о коде удара и выделите его соответственно. Вы не должны окрашивать вывод, программа сделает это для Вас, если это распознает тип кода, который это открывает. Если Вы работаете с другим типом форматов, просто адаптируете расширение той корректировки лучше для того, на чем Вы хватаете (например,>. output.xml,> output.html,> output.py... и т.д.).Удачи!:)

Выделение некоторых слов в выходном файле

Так, если я получил его, Вы хотите выделить слова, которые Вы искали. Снова, это не может быть сделано в файле простого текста просто, потому что простой текст. Однако можно добавить некоторый формат к нему в очень простом способе, таком как использование некоторого кодирования HTML. Это преобразует Ваш вывод в HTML-код, и когда Вы откроете его с программой, которая в состоянии интерпретировать HTML (libreoffice устройство записи, Firefox, и 10000 и т.д.) Вы будете видеть некоторые слова highlited.

Для этого скажем, это - Ваш grep, экспортируемый в HTML:

ls | grep keytext > output.html

И теперь Вы хотите выделить keytext в своем выводе. Можно использовать sed, чтобы сделать это, как:

sed -i 's/keytext/<font color="red">keytext<\/font>/g' output.html

И violà, теперь Ваш keytext является highlited красного цвета.

2
ответ дан 23 November 2019 в 00:21

В зависимости от того, что Вы желаете сделать с выходным файлом, возможно добавить цвета к файлу обычного текста, потому что цвета просто прибывают из некоторых специальных символов. 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.

Таким образом, если Вы желаете использовать редактора, это, вероятно, не то, что Вы хотите.

10
ответ дан 23 November 2019 в 00:21

Другие вопросы по тегам:

Похожие вопросы: