web-dev-qa-db-ja.com

CatとLessは異なる出力を提供します

次のコマンドを実行しました

# top > /home/user/top_output.txt

しばらく何も起こらなかったので、Ctrl+Cを押しました。作成したファイルを確認したところ、内容が含まれていました。そこで、catコマンドを実行すると、この出力が得られました。
cat output of the text file


しかし、lessコマンドで同じことを試したところ、これがわかりました。

less output of the files


これによると postCat,less or Moreの仕事は、エンコーディングを翻訳せずにファイルの内容を表示することだけです。誰かがここで何が起こっているのか教えてもらえますか?
追記:現在Fedora19を使用しています

6
Aditya Cherla

エスケープシーケンスESC [ ... mANSIエスケープシーケンス と呼ばれます。 topはそれらを端末に送信して、出力をカラー、太字、反転テキストなどでフォーマットします。 topを実行しているときはこれらの文字は表示されませんが、結果の形式は表示されます。ブラウザでウェブページを見ていると考えることができます。コンテンツのフォーマットは<html>...では表示されません。

topの出力をファイルにダンプすると、印刷できないエスケープシーケンスが他のすべてのものと一緒に保存されます。ブラウザにview sourceを保存することと考えてください。

lessのデフォルトは、端末制御文字をエスケープして、印刷可能な形式で表示することです。

catのデフォルトは、それらを端末に渡し、端末がそれらを解釈して「正常」に見えるようにすることです。

less -r /home/user/top_output.txtをお試しください

   $ man less ...
   -r or --raw-control-chars
          Causes "raw" control characters to be displayed.  
           The default is to display control characters using the caret
           notation; for example, a control-A (octal 001) is displayed as 
           "^A". Warning: when the -r option is used, less cannot keep 
           track of the actual appearance of the screen (since this depends
           on how the screen responds to each type of control
           character).  Thus, various display problems may result, such
           as long lines being split in the wrong place.

印刷できない文字をエスケープするcat -v /home/user/top_output.txtと比較してください。

12
grebneke