Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 类似grep的工具,可以着色/加粗,但不能过滤?_Regex_Colors_Sed_Grep_Term - Fatal编程技术网

Regex 类似grep的工具,可以着色/加粗,但不能过滤?

Regex 类似grep的工具,可以着色/加粗,但不能过滤?,regex,colors,sed,grep,term,Regex,Colors,Sed,Grep,Term,多年来,我注意到GNU在Unix中的grep(不仅仅是Linux版本)检测到我交互使用了一个支持颜色的术语,如xterm/gnome terminal/kconsole,并在上下文中对搜索表达式进行了很好的着色 什么样的简单cli工具可以只加粗/突出显示正则表达式或简单搜索字符串,但与grep不同,它不会过滤掉任何行?也许一个sed技巧可以做到这一点,我可以将别名和以后的管道命令添加到其中 范例 因此,我编写了一个程序pricehist.sh,它通常会为另一个程序生成类似CSV的数据,但我经常像

多年来,我注意到GNU在Unix中的grep(不仅仅是Linux版本)检测到我交互使用了一个支持颜色的术语,如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
之后),最好添加一些内容,至少突出显示字符串
$(日期+%Y%m%d)
,该字符串目前的计算结果为
20120222


另一个例子是
tail-F/tmp/*.log | grep-C 9999 youjustgotched
,除非我不希望grep真的过滤掉任何行,只是让youjustgotched在噪音中更容易被发现。

你正在寻找的
sed
技巧应该是这样的:

sed 's/pattern/\x1b[01;31m&\x1b[0m/g' file
其中:

  • 模式与您在
    grep
  • 替换模式中的
    &
    表示使用匹配的相同文本
  • 环绕
    的字符用于将前景色设置为红色,然后将其重置

有关如何在
sed
中转义颜色序列的详细信息,请参见此问题的答案。

grep
有一个
-C
选项,可以显示匹配行周围的上下文。你可以利用它

grep -C 9999 'pattern' file

要扩展Shelleter提到的
less
选项(如果您只想直观地检查彩色输出,而不想将其传递给其他程序,则该选项很有效),请执行以下步骤:

  • 通过管道将输出传输到
    less
    (或运行
    less filename.txt
  • /
    向前搜索(或按
    向后搜索)
  • 输入搜索词(默认为正则表达式,或先按
    Ctrl-r
    切换到使用简单字符串)。按
    Enter
  • 搜索词将突出显示。按
    n
    移动到下一个匹配项,或按
    n
    移动到上一个匹配项
  • q
    退出

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

    egrep 'pattern|^' file
    

    编辑:我最初是从对的回答中学到这一点的。

    less
    可以做到这一点,但(我不认为)您可以通过管道传输数据。听起来你脑子里有一个典型的用例。如果您发布一些示例输入和预期输出,让每个人都以一种有用的方式思考您的问题,这可能会有所帮助。祝你好运。没错,
    less
    颜色很好,除了我需要它只打印并高亮显示和终止,而不是等待用户交互(如分页或退出)——然后清除其输出。除非它有我不知道的选择。用例:I
    tail-F
    在一个控制台中存放大量日志文件,以实时观察活动可能重复的感谢;不过,我确实想到了这一点,我不喜欢使用9999任意大的行数(希望stdin在这之前很久就会用完)。还有一个问题是尽量避免缓冲,因为几乎实时的输出在我一直使用的stdout++伟大工具中还没有遇到这个词时,不会输出任何东西。除了我使用
    /
    +
    输入
    ,重复搜索,寻找前进/后退,这样我懒散的手指就不用动太多。我不知道如何使用Ctrl-r,难怪我对“\`键如此友好,只是将单引号切换为双引号,以便shell将我的变量作为搜索模式:
    |sed“s/$(date+%Y%m%d)/\x1b[01;31m&\x1b[0m/g”
    这就解决了这个问题。谢谢!这是一个很好的发现,而且比sed
    方法更简单。我有一种感觉,我的问题可能是一个更老的问题的翻版。我在macos上发现,
    |egrep'模式| ^'
    没有突出显示模式,但是
    | egrep'模式|$'
    出于任何原因都会这样做(在链接的原始问题/答案中,zsh也有类似的说明)