回答:
マークアップを維持するには、単なるテキストファイル以上のものが必要です。色を保持するためにHTML出力を使用します。
aha ieをインストールして、「unix端末の 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
pygmentize
他の多くのユーザーと連携します。
出力ファイルをどのように処理したいかによっては、色が特殊文字に由来するため、通常のテキストファイルに色を追加することができます。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.
そのため、エディターを使用したい場合、これはおそらく望みのものではありません。
正しく理解できたら、ターミナル出力をテキストファイルに保存したいですか?しかし、色でフォーマットする必要があります。その場合、私のアイデアは次のとおりです。
おそらくご存知のように、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
次に、出力でキーテキストを強調表示する必要があります。次のように、sedを使用して実行できます。
sed -i 's/keytext/<font color="red">keytext<\/font>/g' output.html
これで、キーテキストが赤で強調表示されます。