3

3 つの段落を含むテキスト ファイルがあります。bash スクリプト コマンドを使用して、さまざまな段落をさまざまな色で表示したいと考えています。段落 1 は赤、段落 2 は青、段落 3 はシアンです。

次のようなコマンドを使用して、線を色で表示することができました

echo -e '\E[32;47m Green.'; tput sgr0

ただし、ファイルを解析して、新しい段落があるときに色を変更したいと考えています。ヒントをいただければ幸いです。

4

2 に答える 2

5

入力/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

出力:

ここに画像の説明を入力

于 2012-10-07T17:58:25.423 に答える
4

これは、色設定の配列の要素を順番に使用する 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

于 2012-10-07T18:27:43.610 に答える