Shell-Script
使用 sed 為 solaris 上命令的輸出著色
我有一個必須在 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”命令,因為這只是對我實際執行的命令的填充。
\xNN
是 GNU sed 中的轉義序列,但它不是標準的,特別是它在 Solaris 上不可用。您可以在腳本中包含文字轉義字元,但這會使其難以閱讀和編輯。
您可以使用它
printf
來生成轉義字元。它理解八進制轉義,而不是十六進制。esc=$(printf '\033') echo "test" | sed "s,.*,${esc}[31m&${esc}[0m,"
您可以
tput
在呼叫 sed 時呼叫生成替換文本。此命令在terminfo數據庫中查找轉義序列。理論上, usingtput
使您的腳本更便攜,但實際上您不太可能遇到不使用ANSI 轉義碼的終端。echo "test" | sed "s,.*,$(tput setaf 1)&$(tput sgr0),"