regex - 类似于grep的工具,可以着色/加粗但不过滤?

标签 regex colors sed grep term

多年来,我注意到Unix中GNU的grep(不仅仅是Linux风格)检测到我正在交互使用具有颜色功能的TERM,例如xterm / gnome-terminal / kconsole,并在上下文中很好地为搜索表达式着色。

什么样的简单cli工具只能加粗/突出显示您的正则表达式或简单的搜索字符串,但与grep不同,它不会过滤掉任何行吗?也许一个sed技巧可以做到这一点,我可以为它别名并稍后使用管道命令吗?



因此,我编写了一个程序pricehist.sh,该程序通常为另一个程序生成类似CSV的数据,但是我经常像这样对它进行视觉检查:

./pricehist.sh mostalexp-GPW  28 |sort -r -g -k 3 -t ' ' |column -t -s", "
MOSTALEXP,20120222,0.78,0.79,0.76,0.77,63900,0.77    0.04000   5.00000   -0.01000  -1.25000  49203
MOSTALEXP,20120203,0.82,0.82,0.78,0.78,446089,0.78   0.04000   4.87805   0         0         347949
MOSTALEXP,20120124,0.71,0.71,0.69,0.71,61478,0.71    0.03000   4.16667   -0.01000  -1.38889  43649
MOSTALEXP,20120130,0.73,0.73,0.70,0.73,59488,0.73    0.03000   4.10959   0         0         43426
MOSTALEXP,20120210,0.79,0.81,0.77,0.81,104120,0.81   0.03000   3.75000   0.01000   1.25000   84337
MOSTALEXP,20120213,0.80,0.80,0.78,0.80,86606,0.80    0.03000   3.70370   -0.01000  -1.23457  69284
MOSTALEXP,20120126,0.69,0.75,0.69,0.72,146353,0.72   0.02000   2.81690   0.04000   5.63380   105374
MOSTALEXP,20120131,0.72,0.73,0.71,0.72,72734,0.72    0.02000   2.73973   0         0         52368
MOSTALEXP,20120123,0.72,0.73,0.71,0.72,24133,0.72    0.02000   2.73973   0         0         17375
MOSTALEXP,20120214,0.78,0.81,0.78,0.79,56990,0.79    0.02000   2.50000   0.01000   1.25000   45022
MOSTALEXP,20120209,0.79,0.82,0.79,0.80,65243,0.80    0.02000   2.46914   0.01000   1.23457   52194
MOSTALEXP,20120118,0.69,0.70,0.68,0.69,62520,0.69    0.01000   1.44928   0.01000   1.44928   43138
MOSTALEXP,20120125,0.70,0.71,0.70,0.71,92317,0.71    0.01000   1.40845   0         0         65545
MOSTALEXP,20120201,0.71,0.74,0.71,0.74,199791,0.74   0.01000   1.38889   0.02000   2.77778   147845
MOSTALEXP,20120127,0.73,0.73,0.71,0.73,38157,0.73    0.01000   1.38889   0.01000   1.38889   27854
MOSTALEXP,20120207,0.78,0.79,0.77,0.79,56243,0.79    0.01000   1.28205   0.01000   1.28205   44431
MOSTALEXP,20120206,0.78,0.80,0.77,0.78,133597,0.78   0.01000   1.28205   0.02000   2.56410   104205
MOSTALEXP,20120221,0.81,0.81,0.79,0.80,112738,0.80   0.01000   1.25000   0.01000   1.25000   90190
MOSTALEXP,20120217,0.80,0.85,0.79,0.80,272245,0.80   0.01000   1.25000   0.05000   6.25000   217796
MOSTALEXP,20120216,0.81,0.81,0.79,0.80,30814,0.80    0.01000   1.25000   0.01000   1.25000   24651
MOSTALEXP,20120113,0.66,0.66,0.65,0.65,90267,0.65    0.00500   0.76336   0.00500   0.76336   58673
MOSTALEXP,20120220,0.80,0.82,0.80,0.80,83881,0.80    0         0         0.02000   2.50000   67104
MOSTALEXP,20120215,0.80,0.82,0.79,0.80,128714,0.80   0         0         0.03000   3.79747   102971
MOSTALEXP,20120208,0.79,0.84,0.79,0.81,280446,0.81   0         0         0.05000   6.32911   227161
MOSTALEXP,20120120,0.74,0.74,0.72,0.73,128831,0.73   0         0         0.02000   2.77778   94046
MOSTALEXP,20120117,0.67,0.71,0.67,0.69,284886,0.69   0         0         0.04000   5.97015   196571
MOSTALEXP,20120116,0.65,0.67,0.65,0.67,9548,0.67     0         0         0.02000   3.07692   6397
MOSTALEXP,20120202,0.75,0.87,0.75,0.82,1270955,0.82  -0.01000  -1.35135  0.13000   17.56757  1042183
MOSTALEXP,20120119,0.70,0.74,0.70,0.72,320471,0.72   -0.01000  -1.44928  0.05000   7.24638   230739


在管道的末尾(在|column -t之后),最好添加至少突出显示字符串$(date +%Y%m%d)的内容,目前该字符串的计算结果为20120222

另一个示例是tail -F /tmp/*.log | grep -C 9999 YouJustGotHacked,除了我不希望grep实际上过滤掉任何行,只是使YouJustGotHacked更容易发现噪声。

最佳答案

您可以使用egrep并匹配要查找的模式和行首。由于后者总是匹配但不能着色,因此可以模仿您的需求。

egrep 'pattern|^' file


编辑:我最初是从对this question的回答中学到的。

关于regex - 类似于grep的工具,可以着色/加粗但不过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9399005/

相关文章:

regex - 具有命名组的 VBA 和正则表达式

javascript - JavaScript正则匹配是否需要重复代码?

asp.net-mvc - 为什么使用此正则表达式时 ASP.NET-MVC 路由的 UrlParameter.Optional 被忽略?

image-processing - 图像魔术/检测图像中包含的颜色

C 如何改变单词的颜色

python - 如何使用 sed 命令注释掉 python 代码

python - 使用正则表达式将每行的第一个字母大写

r - 如何在R中更改heatmap.2颜色范围?

linux - csv文件用三个字符替换两个字符串

sed - 使用 sed 命令替换两行之间的字符串