「ハイライト」コマンド

「ハイライト」コマンド

文字列全体をstdoutに渡しながら、stdin内の特定の文字列を簡単に強調表示する(色、太字のテキスト、または反転した背景/前景を使用する)ために使用できるコマンドはありますか?私は考えていますそれを構築しかし、すでに存在している場合は使用したいと思います。いくつかの望ましい機能:

  1. 個々の強調表示された文字列は、自動的に異なる方法で強調表示されます。たとえば、最初の文字列は赤色、2番目の文字列は緑色、3番目の文字列は青色で強調表示されます。手動設定は必要ありません。
  2. カラーサポートを検出し、太字/反転/その他利用可能な強調表示方法に置き換えます。
  3. 正規表現とリテラル文字列の一致を許可します。
  4. 一致が重なっている場合は、「foobar」や「barbar」などの巧妙な操作を実行することをお勧めします。
  5. カラーコードを追加する以外に、stdinとstdoutの間には修正はありません。

ベストアンサー1

セドが救いに来る!

(本当に必要なので)改善することができますが、うまく動作します。

$ 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は一対のパラメータを受け入れます(最初のものは一致、2番目の色は)。このスクリプトでは、プロパティは常に太字で表示されます。

カラーエスケープシーケンスを表示するには、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コマンドを使用して経過時間が4倍に増加したことがわかりましたが、これはあまり多くありません。

sedコマンドを他のパーサー(awkなど)に置き換えることができます。

おすすめ記事