我正在尝试使用 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
...
这类事情在 sed
、awk
的 GNU 版本上可以正常工作,... YMMV 与非 GNU 版本。
更简单的方法是关闭着色:
$ git diff --no-color file
但是您可以将漂亮的输出换成略显丑陋的正则表达式。
关于linux - 尝试使用 grep、sed 等时如何处理颜色代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5575520/