17

何年もの間、UnixでのGNUのgrep(Linuxフレーバーだけでなく)が、xterm / gnome-terminal / kconsoleのような色対応のTERMをインタラクティブに使用していることを検出し、コンテキスト内で検索式をうまく色付けしていることに気づきました。

正規表現または単純な検索文字列のみを太字/強調表示するが、grepとは異なり、他の方法では行を除外しない単純なCLIツールは何でしょうか。たぶん、sedのトリックでこれを行うことができます。これをエイリアスして、後でコマンドをパイプすることができますか?

そこで、通常は別のプログラムのCSVのようなデータを生成するプログラムpricehist.shを作成しましたが、次のように視覚的に頻繁に検査します。

./pricehist.sh mostalexp-GPW  28 |sort -r -g -k 3 -t ' ' |column -t -s", "
MOSTALEXP,20120222,0.78,0.79,0.76,0.77,63900,0.77    0.04000   5.00000   -0.01000  -1.25000  49203
MOSTALEXP,20120203,0.82,0.82,0.78,0.78,446089,0.78   0.04000   4.87805   0         0         347949
MOSTALEXP,20120124,0.71,0.71,0.69,0.71,61478,0.71    0.03000   4.16667   -0.01000  -1.38889  43649
MOSTALEXP,20120130,0.73,0.73,0.70,0.73,59488,0.73    0.03000   4.10959   0         0         43426
MOSTALEXP,20120210,0.79,0.81,0.77,0.81,104120,0.81   0.03000   3.75000   0.01000   1.25000   84337
MOSTALEXP,20120213,0.80,0.80,0.78,0.80,86606,0.80    0.03000   3.70370   -0.01000  -1.23457  69284
MOSTALEXP,20120126,0.69,0.75,0.69,0.72,146353,0.72   0.02000   2.81690   0.04000   5.63380   105374
MOSTALEXP,20120131,0.72,0.73,0.71,0.72,72734,0.72    0.02000   2.73973   0         0         52368
MOSTALEXP,20120123,0.72,0.73,0.71,0.72,24133,0.72    0.02000   2.73973   0         0         17375
MOSTALEXP,20120214,0.78,0.81,0.78,0.79,56990,0.79    0.02000   2.50000   0.01000   1.25000   45022
MOSTALEXP,20120209,0.79,0.82,0.79,0.80,65243,0.80    0.02000   2.46914   0.01000   1.23457   52194
MOSTALEXP,20120118,0.69,0.70,0.68,0.69,62520,0.69    0.01000   1.44928   0.01000   1.44928   43138
MOSTALEXP,20120125,0.70,0.71,0.70,0.71,92317,0.71    0.01000   1.40845   0         0         65545
MOSTALEXP,20120201,0.71,0.74,0.71,0.74,199791,0.74   0.01000   1.38889   0.02000   2.77778   147845
MOSTALEXP,20120127,0.73,0.73,0.71,0.73,38157,0.73    0.01000   1.38889   0.01000   1.38889   27854
MOSTALEXP,20120207,0.78,0.79,0.77,0.79,56243,0.79    0.01000   1.28205   0.01000   1.28205   44431
MOSTALEXP,20120206,0.78,0.80,0.77,0.78,133597,0.78   0.01000   1.28205   0.02000   2.56410   104205
MOSTALEXP,20120221,0.81,0.81,0.79,0.80,112738,0.80   0.01000   1.25000   0.01000   1.25000   90190
MOSTALEXP,20120217,0.80,0.85,0.79,0.80,272245,0.80   0.01000   1.25000   0.05000   6.25000   217796
MOSTALEXP,20120216,0.81,0.81,0.79,0.80,30814,0.80    0.01000   1.25000   0.01000   1.25000   24651
MOSTALEXP,20120113,0.66,0.66,0.65,0.65,90267,0.65    0.00500   0.76336   0.00500   0.76336   58673
MOSTALEXP,20120220,0.80,0.82,0.80,0.80,83881,0.80    0         0         0.02000   2.50000   67104
MOSTALEXP,20120215,0.80,0.82,0.79,0.80,128714,0.80   0         0         0.03000   3.79747   102971
MOSTALEXP,20120208,0.79,0.84,0.79,0.81,280446,0.81   0         0         0.05000   6.32911   227161
MOSTALEXP,20120120,0.74,0.74,0.72,0.73,128831,0.73   0         0         0.02000   2.77778   94046
MOSTALEXP,20120117,0.67,0.71,0.67,0.69,284886,0.69   0         0         0.04000   5.97015   196571
MOSTALEXP,20120116,0.65,0.67,0.65,0.67,9548,0.67     0         0         0.02000   3.07692   6397
MOSTALEXP,20120202,0.75,0.87,0.75,0.82,1270955,0.82  -0.01000  -1.35135  0.13000   17.56757  1042183
MOSTALEXP,20120119,0.70,0.74,0.70,0.72,320471,0.72   -0.01000  -1.44928  0.05000   7.24638   230739

パイプの最後(後|column -t)に、少なくとも文字列を強調表示するものを追加すると便利です$(date +%Y%m%d)。これは、現時点では次のように評価されます。20120222

もう1つの例はtail -F /tmp/*.log | grep -C 9999 YouJustGotHacked 、grepで実際に行をフィルターで除外したくない場合を除いて、YouJustGotHackedをノイズで見つけやすくするだけです。

4

4 に答える 4

32

egrep探しているパターンと行頭の両方を使用して一致させることができます。後者は常に一致しますが、色を付けることはできないため、求めているものをエミュレートします。

egrep 'pattern|^' file

編集:私はもともとこの質問への回答からこれを学びました。

于 2012-02-22T18:03:36.357 に答える
11

grepには-C、一致する行の周囲にコンテキストを表示できるオプションがあります。あなたはそれを利用することができます。

grep -C 9999 'pattern' file
于 2012-02-22T16:59:03.720 に答える
1

shellter で言及されているオプションを拡張するにはless(色付けされた出力を視覚的に調べて、別のプログラムに渡したくない場合にうまく機能します)、次の手順を実行します。

  1. less出力を(または runに)パイプしますless filename.txt
  2. を押し/て前方検索 (または?後方検索) します。
  3. 検索語を入力します (デフォルトでは正規表現、またはCtrl-r最初に を押して単純な文字列の使用に切り替えます)。を押しEnterます。
  4. 検索語が強調表示されます。を押しnて次の出現N箇所に移動するか、前の出現箇所に移動します。
  5. を押しqて終了します。
于 2012-02-22T17:12:50.113 に答える