コマンドライン cat が BBEdit と異なるのはなぜですか?

コマンドライン cat が BBEdit と異なるのはなぜですか?

映画業界では、iXML RIFF チャンクにメタデータを含む WAV オーディオ ファイルを使用するのが一般的です。このメタデータを読み取る簡単な方法の 1 つは、BBEdit や Notepad++、TextEdit などのテキスト エディターで WAV ファイルを開くことです。ただし、コマンド ラインではcat機能せず、文字化けした文字が表示されるだけです。問題ないかどうかはわかりませんが、私は macOS 10.13 を使用しています。これらのテキスト編集アプリと異なるのはtailなぜですか?cat

以下は、iXML が下部にあるサンプル ファイルです。http://www.gallery.co.uk/ixml/examples/usesEntireiXMLSpec.WAV

答え1

ファイルを出力する際cat、スペースやドット、その他の置換文字を置換せずに、バイト単位でそのまま出力します。そのため、.WAV ファイルの前の方のバイナリ オーディオ サンプル データを出力すると、それらのバイトの一部が、古いターミナル制御コードや「エスケープ シーケンス」(「ESC」文字で始まるバイトのシーケンス。テキストや背景色の変更、ターミナル画面のクリア、ターミナル画面内でのカーソルの位置変更などに使用できます) と一致します。ターミナル エミュレーター (Terminal.app や iTerm2 など) は、それらの制御コードやエスケープ シーケンスを尊重しようとしますが、これにより通常のテキスト表示方法が狂い、予測できない方法で表示されます。

多くのターミナルベースのツールには、バイナリ データと純粋な印刷可能な ASCII テキストが混在するファイルを処理するためのオプションがあります。たとえば、には、ASCII 制御文字の代わりに印刷可能なシーケンスを代用するオプションcatがあります。 、、、などがあります。 、、などのツールを使用して、ファイル内のバイナリ データの中から ASCII XML データを抽出することもできます。-vvis(1)od(1)hexdump(1)strings(1)sed(1)grep(1)awk(1)

strings(1)これらのオプションのうち、が最も有望だと思います。 ファイルをスキャンして、印刷可能な ASCII 文字の中~長い連続した連続 (文字列) を探し、見つかった文字列を自動的に出力します。 XML は純粋に印刷可能な ASCII なので、strings(1)バイナリ オーディオ データをすべてスキップして、すべてを印刷する必要があります。

関連情報