web-dev-qa-db-ja.com

`highlight`コマンド

文字列全体をstdoutに渡しながら、stdin内の特定の文字列を(色、太字のテキスト、または反転したバック/フォアグラウンドで)簡単に強調表示するために使用できるコマンドはありますか? building it を考えていますが、すでに存在する場合は、それを使用するだけです。いくつかの望ましい機能:

  1. 個別の強調表示文字列は、自動的に別の方法で強調表示されます。たとえば、最初の文字列は赤で強調表示され、2番目は緑、3番目は青で強調表示されます手動設定なし
  2. カラーサポートを検出し、太字/反転/その他の強調表示方法が利用可能な場合はそれらにフォールバックします。
  3. 正規表現とリテラル文字列のマッチングを可能にします。
  4. "foobar"と "barbar"のように、一致する部分が重複している場合は、賢い処理を行うことが望ましいです。
  5. カラーコードの追加を除いて、stdinとstdoutの間で何も変更されません。
11
l0b0

多分 RadovanGarabíkのGeneric Colouriser(grc) ?引数として設定ファイルが必要であり、正規表現で動作します。だから、完全に設定なしではありませんが、プロセスプロセス置換(<(list))を使用できます。そのため、manual設定なしで必ず:- )

4
artistoex

救いの手を差し伸べる!

これは(本当に必要なときに)改善できますが、かなりうまく機能します。

$ 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(グラフィックレンディション)を読んでカラーエスケープセキュリティを確認するか、これを試してください

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

常に例外として機能します。

時間コマンドを使用して、経過時間の4倍に増加していることがわかりました。

Sedコマンドを、好きな、またはニーズに合った他のパーサー(awkなど)に置き換えることができます。

5
nenopera

また、次のように、印刷不能文字のすべての行に一致するパターンでegrepを使用することもできます。

dmesg | egrep --color "swap|$"
2

clide は問題なく動作します。 EPELリポジトリから、RHEL 6.2で使用します

1
golimar

grepのバージョンに色が付いている場合は、正規表現の変更を使用してgrepでテキストを強調表示し、すべての行を一致させて、何も除外されないようにすることができます。次の方法でうまくいくはずです。

<your command> |grep "highlightme\|^"
1
EoghanM

私は http://em.readthedocs.org/ を使用します。 Pythonにより、さまざまなプラットフォームに簡単にインストールできます。シンプルで問題なく動作します。

0
ikalnitsky

リンクで述べたように、grep --color=alwaysは1つのパターンに対してのみ機能します。そうは言っても、そのようなツールが存在するとは思わない。

0