当前位置: 首页>>技术教程>>正文


将grep的输出保存到带有颜色的文件中

, , , , ,

问题描述

我需要将grep命令的结果保存到文件中,但我还希望对输出文件进行格式化并保留颜色,就像在终端中一样。

有没有办法做到这一点?也许让grep保存到某种标记语言?如果不可能,还有其他工具可以完成这项任务吗?

我试图让搜索关键字在输出文件中脱颖而出,就像它在终端中一样。

最佳解决思路

要保留标记,您需要的不仅仅是文本文件。我会使用HTML输出来保持颜色。

  • 安装aha即“转换unix terminal to HTML code的ANSI转义序列”

    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
    

command-line,python,grep,colors,ansi,ubuntu

次佳解决思路

根据您想要对输出文件执行的操作,可以将颜色添加到普通文本文件中,因为颜色只是来自某些特殊字符。 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 highlight对你有用(顺便说一句,这些通常是你在终端的彩色输出中看到的颜色)。因此,诀窍是将文本输出保存在具有适当扩展名的文件中。而不是做这样的事情:

ls | grep something > output

你可能会去

ls | grep something > output.sh

这将使gedit(或任何体面的文本编辑器)自动识别您正在讨论的bash代码,并将相应地突出显示它。您不需要为输出着色,如果程序识别出它打开的代码类型,程序将为您执行此操作。如果您正在使用其他类型的格式,只需将扩展调整为更适合您正在进行调整的内容(例如> output.xml,> output.html,> output.py …等)。祝好运! 🙂

突出显示输出文件中的某些单词

所以,如果我得到它,你想要突出显示你搜索的单词。同样,这不能仅仅因为是纯文本而在纯文本文件中完成。但是,您可以通过一些非常简单的方式添加一些格式,例如使用一些html编码。这将在html代码中转换您的输出,当您使用能够解释html(libreoffice writer,firefox和10000 etceteras)的程序打开它时,您将看到一些高调的单词。

为此,让我们说这是你的grep,导出为html:

ls | grep keytext > output.html

现在您想在输出中突出显示关键文本。您可以使用sed来执行此操作,例如:

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

而violà,现在你的关键文字是红色的。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2612.html,未经允许,请勿转载。