ファイルの特定の文字列に色を割り当てる方法

ファイルの特定の文字列に色を割り当てる方法

以下のようにHello.txtファイルを準備しました。

1253125213
213532135
23513125215

次に、「2」青と「2」赤を除くすべての行に色を付けたいと思います。

最初は文章を書いた。

BLUE='\033[0;34m'
RED='\033[0;31m'

そしてそうしようと努力しましたがsed 's/2/${RED}2${BLUE}/'、効果がありませんでした。

どうすればいいですか?

ベストアンサー1

まず、補間するときに二重引用符が必要です。

$ sed "s/2/${RED}2${BLUE}/" Hello.txt
1233[0;31m2233[0;34m53125213
233[0;31m2233[0;34m13532135
233[0;31m2233[0;34m3513125215

ただし、ASCIIエスケープシーケンスにはsedに影響を与える文字が含まれているため、エスケープ文字シーケンスを実際の制御文字に変換する必要があります。これはサブシェルを使用して行うことができます。最後を参照してください/g。これは、1行に複数の置換が許可されることを意味します。

$ sed "s/2/`echo $RED`2`echo $BLUE`/g" Hello.txt

カラー出力1

今、これはまだ正しいではないようです。実際にやるべきことは、各行が青で始まるように設定し、次に各2代替項目が赤で始まり、青で終わるように設定することです。帽子文字は^行の始まりを表す正規表現です。また、パイプの使用と再配置に注意してくださいcat

$ cat Hello.txt | sed "s/^/`echo $BLUE`/" | sed "s/2/`echo $RED`2`echo $BLUE`/g"

カラー出力2

サブシェル変換を変数割り当てに移動して、より明確にすることもできます。存在しない変数を使用しないように文字と区別するREDために中括弧が必要です。2RED2

$ BLUE=`echo '\033[0;34m'`
$ RED=`echo '\033[0;31m'`
$ cat Hello.txt | sed "s/^/$BLUE/" | sed "s/2/${RED}2${BLUE}/g"

源泉:http://www.cyberciti.biz/faq/unix-linux-sed-ascii-control-codes-nonprintable/

おすすめ記事