Мне нужно сохранить результат команды grep в файл, но я также хочу, чтобы выходной файл был отформатирован и сохранял цвета точно так же, как в терминале.
Есть ли способ сделать что? Может быть, 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.
[d4 ] Поэтому, если вы хотите использовать редактор, это, вероятно, не то, что вы хотите. Если я правильно понял, вы хотите сохранить вывод терминала в текстовом файле, не так ли? Но вы хотите, чтобы он был отформатирован с цветами. Если это так, вот мои идеи:
Как вы, вероятно, знаете, если вы записываете вывод 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
И violà, теперь ваш ключевой текст выделен красным цветом.