3 つの段落を含むテキスト ファイルがあります。bash スクリプト コマンドを使用して、さまざまな段落をさまざまな色で表示したいと考えています。段落 1 は赤、段落 2 は青、段落 3 はシアンです。
次のようなコマンドを使用して、線を色で表示することができました
echo -e '\E[32;47m Green.'; tput sgr0
ただし、ファイルを解析して、新しい段落があるときに色を変更したいと考えています。ヒントをいただければ幸いです。
入力/tmp/FILE
: http://pastie.org/4928415
スクリプト:
#!/bin/bash
c=1
tput setaf $c
while read a; do
[[ $a =~ ^$ ]] && tput setaf $((++c))
echo "$a"
done < /tmp/FILE
tput sgr0
出力:
これは、色設定の配列の要素を順番に使用する awk ソリューションです。
BEGIN { nc = split("\33[31;47m \33[34;43m \33[36;40m", colors, " ");
c=1; print colors[c] }
{ print }
/^$/ { c = 1+(c%nc); print colors[c]}
[編集: 上記は誤って段落間に余分な空白行を追加します。修正されたコードは次のとおりです。
BEGIN { nc = split("\33[31;47m \33[34;43m \33[36;40m", colors, " ");
c=1; printf "%s", colors[c] }
/^$/ { c = 1+(c%nc); print colors[c]}
!/^$/
これ!/^$/
により、空白以外の行がそのまま印刷されます。(編集終了)]。
上記がファイル 3-para.awk にあり、データがファイル 3-para.data にある場合、次のようなコマンドを使用して、awk -f 3-para.awk 3-para.data
次のような出力を取得します。
より便利に使用するには、スクリプトを呼び出してから色をデフォルトにリセットする関数を定義します。
tricolor() {
awk -f 3-para.awk $1; tput sgr0
}
(例)を介して関数を使用しますtricolor 3-para.data