Shell

高亮命令

  • June 2, 2021

是否有一個命令可用於在將整個字元串傳遞到標準輸出時輕鬆突出顯示標準輸入中的特定字元串(使用顏色、粗體文本或反轉的背景/前景)?我正在考慮建構它,但如果它已經存在,我寧願只使用它。一些理想的功能:

  1. 單獨的突出顯示字元串以不同的方式自動突出顯示。例如,第一個字元串將以紅色突出顯示,第二個以綠色突出顯示,第三個以藍色突出顯示,無需手動配置
  2. 檢測顏色支持並退回到可用的粗體/反轉/其他突出顯示方法。
  3. 允許匹配正則表達式和文字字元串。
  4. 如果匹配重疊,最好做一些聰明的事情,例如“foobar”和“barbar”。
  5. 除了添加顏色程式碼外,stdin 和 stdout 之間沒有任何修改。

也許是 Radovan Garabík 的 Generic Colouriser (grc)?它需要一個配置文件作為參數並使用正則表達式。所以不是完全沒有配置,但你可以使用程序程序替換(<(list)),所以無論如何都不需要手動配置:-)

Sed 來救援!

你可以改進它(因為它確實需要它)但它工作得很好。

$ cat >~/bin/hilight <<EOF
#!/bin/bash
while [ $# -gt 0 ]
do
COMANDO=$COMANDO's/'$1$'/\033[01;'$2$'m\033[K\\0\033[m\033[K/g\n'
shift;shift;
done

sed -e "$COMANDO"
EOF

為簡單起見,hilight 接受一對參數(首先是匹配,其次是顏色)在此腳本中,屬性始終為粗體

閱讀 man console_codes (Graphic Rendition) 以查看顏色轉義序列,或試試這個

for attrib in $(seq 0 12); do
 for color in $(seq 30 37) $(seq 40 47) $(seq 90 97); do
   printf %b " $attrib $color:\033[$attrib;${color}mhi, dudes\033[m"
 done
done

使用它有重要的缺點:

$ dmesg | hilight \\[ 34 ] 34

但這根本不是:

$ dmesg | hilight \\[ 34 ] 34 [[:digit:]] 31

因為

$$ :digit: $$查找先前替換的逃生序列中的數字。 就像是:

$ cat /var/log/kern.log | hilight kernel 31 a 34 et 33

將始終作為例外工作。

使用 time 命令,我發現經過的時間增加了四倍,這並不算多。

您可以將 sed 命令替換為您喜歡或適合您需要的任何其他解析器(awk 等…)

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