linux - 尝试使用 grep、sed 等时如何处理颜色代码

标签 linux bash unix sed grep

我正在尝试使用 sed 来处理生成彩色线条的命令的一些输出(它是 git diff,但我认为这不重要)。我试图匹配行首的“+”符号,但这被“+”之前的颜色代码混淆了。有没有简单的方法来处理这个问题,还是我需要使用一些复杂的正则表达式来匹配颜色代码。

如果可能的话,我想保留线条的颜色。

最佳答案

如果你必须有颜色,那么你将不得不做一些丑陋的事情:

$ git diff --color web-app/db/schema.rb |grep '^^[\[32m+

^[ 实际上是一个原始转义字符(Ctrl+V ESC 在 bash 中,ASCII 27)。您可以使用 cat -v 找出必要的转义序列:

$ git diff --color web-app/db/schema.rb |cat -v
^[[1mdiff --git a/web-app/db/schema.rb b/web-app/db/schema.rb^[[m
^[[1mindex 45451a2..411f6e1 100644^[[m
^[[1m--- a/web-app/db/schema.rb^[[m
^[[1m+++ b/web-app/db/schema.rb^[[m
...

这类事情在 sedawk 的 GNU 版本上可以正常工作,... YMMV 与非 GNU 版本。

更简单的方法是关闭着色:

$ git diff --no-color file

但是您可以将漂亮的输出换成略显丑陋的正则表达式。

关于linux - 尝试使用 grep、sed 等时如何处理颜色代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5575520/

相关文章:

bash - 仅从一组行中获取版本号

unix - 来自两个文件的gnuplot绘图数据:在一个x坐标中,在另一个y中

windows - RSync 仅复制文件夹目录结构而不复制文件

c++ - 执行结束时出现段错误(核心转储)

ec2 上的 Python uwsgi 设置

linux - 命令 `docker` 无法与管道一起使用。请勿使用 `|` 、 `>` 、 `>>`

bash - 如何在 Macbook 上为 oh-my-zsh 更改我的 $PS1?

linux - 打印顶部输出的第二帧

linux - 使cmake_check_build_system错误1

linux - 在文件中查找然后使用 Linux 移动该文件?