文字列全体をstdoutに渡しながら、stdin内の特定の文字列を簡単に強調表示する(色、太字のテキスト、または反転した背景/前景を使用する)ために使用できるコマンドはありますか?私は考えていますそれを構築しかし、すでに存在している場合は使用したいと思います。いくつかの望ましい機能:
- 個々の強調表示された文字列は、自動的に異なる方法で強調表示されます。たとえば、最初の文字列は赤色、2番目の文字列は緑色、3番目の文字列は青色で強調表示されます。手動設定は必要ありません。。
- カラーサポートを検出し、太字/反転/その他利用可能な強調表示方法に置き換えます。
- 正規表現とリテラル文字列の一致を許可します。
- 一致が重なっている場合は、「foobar」や「barbar」などの巧妙な操作を実行することをお勧めします。
- カラーコードを追加する以外に、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など)に置き換えることができます。
答え2
おそらくRadovan Garabíkの汎用トナー(grc)?設定ファイルをパラメータとして使用し、正規表現で動作します。そのため、必ずしも設定がないわけではありませんが、プロセスプロセスの置き換え(<(list)
)を使用できるので、とにかく必要ありません。手動構成:-)
答え3
印刷できない文字のすべての行に一致するパターンでegrepを使用することもできます。たとえば、次のようになります。
dmesg | egrep --color "swap|$"
答え4
クライド よく走っています。 EPELリポジトリのRHEL 6.2でこれを使用しています。