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

jon*_*rry 7 unix linux bash grep sed

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

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

mu *_*ort 3

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

$ git diff --color web-app/db/schema.rb |grep '^^[\[32m+
Run Code Online (Sandbox Code Playgroud)

^[实际上是一个原始转义字符(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
...
Run Code Online (Sandbox Code Playgroud)

这种事情对于 GNU 版本的sed, awk, ... YMMV 和非 GNU 版本都可以很好地工作。

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

$ git diff --no-color file
Run Code Online (Sandbox Code Playgroud)

但是你可以用漂亮的输出来换取稍微难看的正则表达式。