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

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

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

有办法吗?也许让 grep 保存为某种标记语言?如果不可能,还有其他工具可以完成此任务吗?

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

答案1

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

  • 安装啊哈即“将 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
    

在此处输入图片描述

答案2

根据您要对输出文件执行的操作,可以向普通文本文件添加颜色,因为颜色仅来自一些特殊字符。当您将其重定向到文件时,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.

因此,如果您想使用编辑器,这可能不是您想要的。

答案3

如果我理解正确的话,您想将终端输出保存在文本文件中,对吗?但您希望它以颜色格式化。如果是这样的话,以下是我的想法:

自动突出显示输出

您可能知道,如果您将 grep 输出捕获到文本文件中,正是因为它是文本文件,所以无法格式化。所以,据我所知,您无法轻松地做到这一点。

尽管如此,还是有一个简单的解决方法,即让文本编辑器知道正在打开什么类型的文件。例如,假设您的 grep 输出有一些 bash 组件,因此 bash 高亮对您有用(顺便说一句,这些通常是您在终端的彩色输出中看到的颜色)。因此,诀窍是将文本输出保存在具有适当扩展名的文件中。而不是执行类似以下操作:

ls | grep something > output

你可以选择

ls | grep something > output.sh

这将使 gedit(或任何像样的文本编辑器)自动识别您正在谈论 bash 代码,并相应地突出显示它。您不需要为输出着色,如果程序识别出它正在打开的代码类型,它将为您完成此操作。如果您正在使用其他类型的格式,只需调整扩展名以更好地适应您正在 greping 的内容(例如 > 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

现在,您的关键文本已以红色突出显示。

答案4

选择终端的内容,然后在终端内右键单击。在选项中,您可以找到“复制为 HTML”。选择该选项并将复制的内容粘贴到文件中,并将其另存为 html 文件。使用任何 html 渲染器(例如浏览器)打开 html 文件。您将看到与终端相同的内容和颜色。在 ubuntu 20.04 LTS 中测试和验证。

相关内容