我目前正在使用以下命令透過 tail 命令使用標準 ANSI 顏色:
tail -f syslogfile | sed -e 's/\(.*MAJOR.*\)/\o033[93m\1\o033[39m/'
這是亮黃色,但我剛剛在 bash 中使用擴展的 256 種顏色,我想使用橙色。我找到了正確的前景和背景顏色編號方案,使我在黑色上呈現橙色。
echo -e "\\033[40;5;95;38;5;202mhello world\\033[0m"
但是,我無法將其轉換為可以與 tail 命令一起使用的 sed 命令。
我已經嘗試過這個:
sed -e 's/\(.*MAJOR.*\)/\033[40;5;95;38;5;202\033[0m/'
但這讓一切都變成白色。我努力了:
sed -e 's/\(.*MAJOR.*\)/\o033[40;5;95;38;5;202\o033[0m/'
但這會使包含字串“MAJOR”的行變黑。我也嘗試省略背景方案並只使用橙色:
sed -e 's/\(.*MAJOR.*\)/\033[38;5;202\033[0m/'
但這似乎也將包含“MAJOR”一詞的行塗黑了 有誰知道 sed 給我黑色背景上的橙色的正確 ANSI 序列是什麼?僅供參考,我在第一個範例中使用的 sed 命令以所選顏色列印整行,我需要使用新顏色序列進行相同的行為,而不僅僅是為單字本身著色。
更新:
這有效:
sed -e 's/\(.*MINOR.*\)/\o033[38;5;202m\1\o033[40;5;95m/'
但留下不包含次要洋紅色的其他線條。我如何讓它們預設回到白色。我是否沒有正確關閉某些東西?它實際上為整個 shell 洋紅色設定了預設字體顏色,正如我終止 tail 命令時所看到的那樣。
答案1
透過編寫範例腳本可以看到不只一個問題:
#!/bin/sh
MSG="this is MAJOR stuff"
echo "$MSG" | sed -e 's/\(.*MAJOR.*\)/\o033[93m\1\o033[39m/'
echo "$MSG" | sed -e 's/\(.*MAJOR.*\)/\033[40;5;95;38;5;202\033[0m/'
echo "$MSG" | sed -e 's/\(.*MAJOR.*\)/\o033[40;5;95;38;5;202\o033[0m/'
echo "$MSG" | sed -e 's/\(.*MAJOR.*\)/\033[38;5;202\033[0m/'
產生(^[
是轉義):
^[[93mthis is MAJOR stuff^[[39m
this is MAJOR stuff33[40;5;95;38;5;202this is MAJOR stuff33[0m
^[[40;5;95;38;5;202^[[0m
this is MAJOR stuff33[38;5;202this is MAJOR stuff33[0m
在第一行中,a^[[93m
是 aixterm 16 色轉義,用於設定黃色文本,並將^39m
文字重設為終端的預設顏色。
第二行有未終止轉義序列的問題(開始將背景設為黑色 = 40、閃爍 = 5、95 = 明亮的洋紅色文本,然後 38 和 5 嘗試引入 256 色序列 - 未終止) 。
第三行與第二行略有不同。
主要問題是你sed
不會發出轉義字符,除非你將其表達為\o033
(你做過在幾個地方做)。
其次,你沒有正確結束越獄。決賽m
是這個序列的一部分。當最後一個字元遺失時,整個序列可以被丟棄。最好閱讀文件:XTerm 控制序列。
順便一提,美國國家標準學會從未記錄過超過 8 種顏色的任何內容,因此透過原始實作(aixterm 表示 16 色,xterm 表示 256 色)引用序列不會那麼混亂。
如果你只是想要整行主要的以橙色突出顯示,然後(根據評論),您可以這樣做:
sed -e 's/^\(.*MAJOR.*\)$/\o033[48;5;95m\1\o033[m/'
然而,該5
程式碼的支援不如2
使用 R/G/B 的廣泛,如下所示:
sed -e 's/^\(.*MAJOR.*\)$/\o033[48;2;128;128;0m\1\o033[m/'
(128 只是第一次嘗試 - 您的口味可能會有所不同)。
延伸閱讀:
- ECMA-48:編碼字元集的控制函數
- 我可以透過顏色編號來設定顏色嗎?(xterm 常見問題)
- XTerm 控制序列
特別是,以
答案2
您可能正在尋找這個:
sed -e 's/\(.*MAJOR.*\)/\o033[48;5;95;38;5;202m\1\o033[0m/'
雖然它可以簡化為
sed -e 's/.*MAJOR.*/\o033[48;5;95;38;5;202m&\o033[m/'
請注意 的變更40
意味著48
我們要更改背景顏色。
如果你想要背景顏色為黑色:
sed -e 's/.*MAJOR.*/\o033[40;38;5;202m&\o033[m/'
如果背景顏色已經是黑色,則根本不需要更改它:
sed -e 's/.*MAJOR.*/\o033[38;5;202m&\o033[m/'