Solarisでsedを使用したコマンド出力の色の指定

Solarisでsedを使用したコマンド出力の色の指定

LinuxとSolarisで実行する必要があるkshスクリプトがあります。特定のコマンドの出力に色を付けようとしています。 Linux(特にRHEL6)では機能しますが、Solaris(SunOS 5.10)では機能しません。

Linuxのコマンド(出力「test」が赤で正しく表示されます):

[amartin@linuxbox:~]$ echo "test" | sed 's,.*,\x1B[31m&\x1B[0m,'
test

Solarisのコマンド(出力「test」は色付けされていません):

[amartin@sunbox:~]$ echo "test" | sed 's,.*,\x1B[31m&\x1B[0m,'
x1B[31mtestx1B[0m

出力に元のコードなしで出力が赤になるようにこのコマンドを作成する方法はありますか? "echo" コマンドは実際に実行するコマンドのパディングだけなので変更できません。

ベストアンサー1

\xNNGNU sedのエスケープシーケンスですが、標準ではなく、特にSolarisでは使用できません。

スクリプトにリテラルエスケープ文字を含めることができますが、これを行うと読みやすく編集が難しくなります。

printfこれを使用してエスケープ文字を生成できます。 16進ではなく8進エスケープを理解します。

esc=$(printf '\033')
echo "test" | sed "s,.*,${esc}[31m&${esc}[0m,"

電話してもいいtputsed 呼び出しで代替テキストを生成します。このコマンドはエスケープシーケンスを探します。用語情報データベース。理論的には、tputスクリプトの移植性を向上させますが、実際には使用しない端末を実行する可能性を減らします。ANSIエスケープコード

echo "test" | sed "s,.*,$(tput setaf 1)&$(tput sgr0),"

おすすめ記事