awkの複数行変数のカラーコードセクション

awkの複数行変数のカラーコードセクション

変数がありますvarCode:in以降の行を印刷したいがblue指定された行は削除し、残りは でCode:印刷しようとしますgreen。 Ubuntuを実行する変数処理を実行するには、awkを呼び出すbashスクリプトを使用します。

sgr="$( tput sgr0 )"
grn="$( tput bold; tput setaf 34 )"
blu="$( tput bold; tput setaf 39 )"

var="
 Description
 Code:
  for i in {1..72..1}; do shft+=\" \"; done
 
 Details"

printf '%s\n' "$var"  \
 | awk -v kb="$blu" -v kg="$grn" -v rst="$sgr"  \
     '{ codefound = 0
        fm="%s%s%s\n"
        if (codefound) { printf(fm, kb, $0, rst) }
        else { printf(fm, kg, $0, rst) }
      }'

色自体を定義する方法はawk

次のように生成したいと思います(#はテキストの前景色を説明するために使用されます)。

 Description  # green
   for i in {1..72..1}; do shft+=" "; done  # blue
 
 Details  # green

ベストアンサー1

主に回答に基づくawkを使用してbashから出力を色付けする、これはこの場合に必要なものであり、前景および/または背景色(複数)を変更する必要がある場合もあります。

$ cat tst.awk
BEGIN {
    split("BLACK RED GREEN YELLOW BLUE MAGENTA CYAN WHITE",tputColors)
    for (i in tputColors) {
        colorName = tputColors[i]
        colorNr = i-1

        cmd = "tput setaf " colorNr
        fgEscSeq[colorName] = ( (cmd | getline escSeq) > 0 ? escSeq : "<" colorName ">" )
        close(cmd)

        cmd = "tput setab " colorNr
        bgEscSeq[colorName] = ( (cmd | getline escSeq) > 0 ? escSeq : "<" colorName ">" )
        close(cmd)
    }

    cmd = "tput sgr0"
    colorOff = ( (cmd | getline escSeq) > 0 ? escSeq : "<sgr0>" )
    close(cmd)

    fgColor = dfltFgColor = "GREEN"
}

/Code:/ { fgColor = "BLUE"; next }
!NF { fgColor = dfltFgColor }
{ print fgEscSeq[fgColor] $0 colorOff }

ここに画像の説明を入力してください。

tput以下を使用して色を定義したくない場合awkやその他の方法による線の検索と色の指定エスケープシーケンスを使用する方法を学びます。

おすすめ記事