bashスクリプトの特定のキーワードだけを色付けする方法は?

bashスクリプトの特定のキーワードだけを色付けする方法は?

一部のユニットテストコードを実行しています。単体テストコードはプレーンテキストを出力します。テキストが多いので、ユーザーにとって重要なキーワードを強調したいと思います。

この例では、キーワードは「PASS」と「FAIL」です。

「PASS」を緑色に、「FAIL」を赤色で表示するにはどうすればよいですか?

ベストアンサー1

supercatあなたが探していることをやっているようです。

パッキング:スーパー猫
Description-en: ターミナルとHTMLテキストの色付けプログラム
 Supercatは、一致する規則に従ってテキストに色を割り当てるプログラムです。
 式/文字列/文字。 SupercatはHTML出力もサポートしています。
 標準ASCIIテキストで。いくつかのテキストの着色プログラムとは異なり
 はい、Supercatを使用するためにプログラマは必要ありません。
 ぬりえルールを開発します。
ホームページ:http://supercat.nosredna.net/

コマンドラインで何を色付けするかを教える方法はないようです。構成ファイルを指定する必要があります。

パターンに一致するテキストを強調表示する "hilite" または "hl" というプログラムがあったことを覚えているようです (たとえば、grep --colour一致しない行も表示する)。検索しても見つかりません。それのために。

最後に、GNUはgrepハイライトモードで使用できます。ただし、1つの色しか使用できません(たとえば、PASSを緑色に、FAILを赤色に設定することはできず、両方とも同じ色で強調表示されます)。

次の方法でデータを転送してください。

grep -E --color "\b(PASS|FAIL)\b|$"

この例ではgrep拡張-E正規表現オプションを使用していますが、デフォルトの正規表現-G-F固定文字列、および PCRE も使用できます。-P

すべての一致が強調表示されます。デフォルト値は赤色または GREP_COLOR 環境変数を設定します。

これは、パターンの終わりが行の終わりと一致する(つまり、すべての行が一致するため|$)すべての行が表示されることです(色は指定されていません)。

これは\bワード境界表示であるため、FAILと一致しますが、FAILUREとは一致しません。必須ではないため、単語の一部を一致させるには削除してください。

以下は、昨日作成したsupercat用のサンプルラッパースクリプトです。うまくいきますが、書いている間、supercatに大文字と小文字を区別しない検索オプションがないことがわかりました。 IMO、これはプログラムの有用性をはるかに低下させます。ただし、「-i」オプションを作成する必要がないため、スクリプトは大幅に簡素化されます。 :)

#! /bin/bash 

# Requires: tempfile from debian-utils, getopt from util-linux, and supercat

SCRIPTNAME=$(basename $0)
CFGFILE=$(tempfile -p spc)

usage() {
  cat <<__EOF__
Highlight regexp patterns found on stdin or files specified on command
line with specified colours.

Usage: $SCRIPTNAME [ --colour "pattern" ...] [FILE]

Options:

        -k,--black   regexp
        -r,--red     regexp
        -g,--green   regexp
        -y,--yellow  regexp
        -b,--blue    regexp
        -m,--magenta regexp
        -c,--cyan    regexp
        -w,--white   regexp

Example:

    run-script.sh | $SCRIPTNAME --green PASS --red FAIL

__EOF__
  exit 0
}


# Format definition from the spc man page:
#1234567890123456789012345678901234567890123456789012345
#HTML Color Name      Col A N T RE / String / Characters
FMT="%-20s %3s %1s %1s %1s (%s)\n"

add_color_to_config() {
  COLOR="$1"
  PATTERN="$2"

  printf "$FMT" "$COLOR" "$COLOR" - 0 r "$PATTERN" >> "$CFGFILE"
}


# uses the "getopt" program from util-linux, which supports long
# options. The "getopts" built-in to bash does not.
TEMP=$(getopt \
       -o 'hk:r:g:y:b:m:c:w:' \
       -l 'help,black:,red:,green:,yellow:,blue:,magenta:,cyan:,white:' \
       -n "$0" -- "$@")

if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi

eval set -- "$TEMP"

while true ; do
    case "$1" in
        -k|--bla*)       add_color_to_config blk "$2" ; shift 2 ;;
        -r|--red)        add_color_to_config red "$2" ; shift 2 ;;
        -g|--gre*)       add_color_to_config grn "$2" ; shift 2 ;;
        -y|--yel*)       add_color_to_config yel "$2" ; shift 2 ;;
        -b|--blu*)       add_color_to_config blu "$2" ; shift 2 ;;
        -m|--mag*)       add_color_to_config mag "$2" ; shift 2 ;;
        -c|--cya*)       add_color_to_config cya "$2" ; shift 2 ;;
        -w|--whi*)       add_color_to_config whi "$2" ; shift 2 ;;

        -h|--hel*)       usage ; exit 0 ;;

        --)         shift ; break ;;

        *)          echo 'Unknown option!' ; exit 1 ;;
    esac
done

spc -R -c "$CFGFILE" "$@"
rm -f "$CFGFILE"

おすすめ記事