web-dev-qa-db-ja.com

grepの出力を色付きのファイルに保存する

Grepコマンドの結果をファイルに保存する必要がありますが、出力ファイルをフォーマットして、端末の場合と同じように色を保持する必要もあります。

それを行う方法はありますか? grepをある種のマークアップ言語に保存するのでしょうか?それが不可能な場合、このタスクを達成できる別のツールはありますか?

ターミナルとまったく同じように、出力ファイルでも検索キーワードを目立たせようとしています。

マークアップを維持するには、単なるテキストファイル以上のものが必要です。色を保持するためにHTML出力を使用します。

  • aha をインストールします。つまり、 nix端末のANSIエスケープシーケンスをHTMLコードに変換します "

    Sudo apt-get install aha
    
  • 次に、grep(またはls)の出力を次のように保存します。

    ls --color=always | aha --black --title 'ls-with-colors' > ls-with-colors.html
    

    オプション:

    --black param to set background as black color
    --title param to set the title for HTML page
    

pygmentizeによるファイル拡張子の構文ハイライト

  • pygmentizeのインストール:

    Sudo apt-get install python-pygments
    
  • 次に、この種類のコマンドを実行します。

    pygmentize file.pl | grep -i --color=always version | aha --black > ls-with-colors.html
    

enter image description here

42
Sylvain Pineau

出力ファイルで何をしたいのかに応じて、通常のテキストファイルに色を追加することができます。これは、色がいくつかの特殊文字に由来するためです。 Grepは、ファイルにリダイレクトするときにそれらを印刷したくないようです。そのため、次のように強制する必要があります。

grep --color=always "stuff" input.txt > output.txt

これで、ファイルをコンソールに印刷すると、Bashはこれらの文字を「この色を使用」として解釈するため、色付きで印刷されます。

cat output.txt

ただし、vimなどのエディターで開くと、奇妙な文字が表示されます。たとえば、コマンドを使用するとき

echo "A sentence. A red sentence. Another sentence." \
  | grep --color=always "A red sentence" > output.txt

catを使用して印刷すると、出力は正しく見えますが、vimで開くと、

A sentence. ^[[01;31m^[[KA red sentence^[[m^[[K. Another sentence.

そのため、エディターを使用したい場合、これはおそらく望みのものではありません。

10
MasterOfBinary

正しく理解できたら、ターミナル出力をテキストファイルに保存したいですか?ただし、色でフォーマットする必要があります。その場合、私のアイデアは次のとおりです。

出力を自動的に強調表示する

おそらくご存知のように、grep出力をテキストファイルにキャプチャした場合、それがテキストファイルであるため、フォーマットすることはできません。したがって、私が知る限り、簡単な方法でそれを行うことはできません。

それにもかかわらず、簡単な回避策があります。これは、どの種類のファイルが開いているかをテキストエディターに認識させることから成ります。たとえば、grep出力にbashコンポーネントがあるため、bashの強調表示が機能するとします(ちなみに、これらは多くの場合、ターミナルの色付き出力に表示される色です)。そのため、テキスト出力を適切な拡張子を持つファイルに保存するのがコツです。次のようなことをする代わりに:

ls | grep something > output

あなたは行くかもしれません

ls | grep something > output.sh

これにより、gedit(または適切なテキストエディター)は、bashコードについて話していることを自動的に認識し、それに応じて強調表示します。出力に色を付ける必要はありません。開いているコードの種類を認識すると、プログラムがそれを行います。他の種類の形式を使用している場合は、拡張機能を、目的に合わせて拡張機能を調整するだけです(たとえば、> output.xml、> output.html、> output.py ...など)。幸運を! :)

出力ファイル内のいくつかの単語を強調表示する

だから、もし私がそれを手に入れたなら、あなたはあなたが検索した言葉を強調したい。繰り返しますが、プレーンテキストであるという理由だけで、プレーンテキストファイルでそれを行うことはできません。ただし、HTMLコーディングを使用するなど、非常に簡単な方法でフォーマットを追加できます。これにより、出力がhtmlコードに変換され、htmlを解釈できるプログラム(libreoffice writer、firefox、10000 etceteras)で出力を開くと、いくつかの単語が強調表示されます。

そのために、これがhtmlにエクスポートされたgrepであるとしましょう:

ls | grep keytext > output.html

次に、出力でkeytextを強調表示します。 sedを使用して、次のように実行できます。

sed -i 's/keytext/<font color="red">keytext<\/font>/g' output.html

これで、キーテキストが赤で強調表示されます。

2
Rho