【问题标题】:Simple way to colour alternate output lines in bash在 bash 中为交替输出行着色的简单方法
【发布时间】:2009-12-02 08:46:09
【问题描述】:

我需要 grep 整个目录的字符串,我得到大约 50 个结果。我想为每一行着色,文本颜色或背景颜色。最好是一个脚本,我可以将任何命令的输出通过管道传输到,这样它就可以输出相同的(尽管是彩色的)输出。

【问题讨论】:

    标签: bash shell command-line colors


    【解决方案1】:

    不是很漂亮,但可以解决问题:

    (将其保存到foo.bash 并执行grep whatever wherever | ./foo.bash

    #!/bin/bash
    while read line
    do
      echo -e "\e[1;31m$line"
      read line
      echo -e "\e[1;32m$line"
    done
    echo -en "\e[0m"
    

    您可以在这里找到list of color codes in bash

    【讨论】:

    • 很整洁,也可以作为函数来避免第二个脚本。
    • 我喜欢这个,但之后你忘了重置:echo -en '\e[0m';
    • 在循环之后重置它可能会更好。
    • @JayC:这不仅仅是间距。在原始版本中,输入中的通配符变成输出中的文件列表;例如,echo "*" | ./foo.bash.
    • 如果行数是奇数,这也会打印额外的一行。我认为您可以通过将循环体的后两行更改为: read line && echo -e "\e[1;32m$line" 来修复它(所以如果读取行失败,它不会回显任何内容)跨度>
    【解决方案2】:

    Perl 安装在许多系统上。你可以让它为你替代:

    grep -r whatever somedir/ | perl -pe '$_ = "\033[1;29m$_\033[0m" if($. % 2)'
    

    如果您更喜欢可读性,在 Perl 中,$. 可以替换为 $INPUT_LINE_NUMBER

    【讨论】:

      【解决方案3】:

      这是为了描绘我认为的换行线? 这个 shell 脚本使用来自256 color 调色板的背景颜色, 以免干扰 grep --color 可能执行的其他突出显示。

      #!/bin/sh
      c=0
      while read line; do
        [ $(($c%2)) -eq 1 ] && printf "\033[48;5;60m"
        printf "%s\033[0m\n" "$line"
        c=$(($c+1))
      done
      

      这有一个警告,行内的反斜杠等将被破坏, 所以将其视为重新实现的伪代码

      【讨论】:

      【解决方案4】:

      这里在python中也是一样的;

      import sys
      for line_number,line in enumerate(sys.stdin.readlines()):
          print '%s[1;3%dm%s%s[0m' % (chr(27),(line_number % 2+1),line,chr(27)),
      

      【讨论】:

        猜你喜欢
        • 2010-09-28
        • 1970-01-01
        • 1970-01-01
        • 2010-09-06
        • 2011-01-19
        • 1970-01-01
        • 2011-06-15
        • 2021-11-14
        • 2019-11-27
        相关资源
        最近更新 更多