Shell-Script

使用 sed 為 solaris 上命令的輸出著色

  • June 25, 2021

我有一個必須在 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),"

引用自:https://unix.stackexchange.com/questions/45924