grep
大容量のテキストファイルで特定の表現を使用する必要があることがよくあります。何らかの理由で、個人プロバイダはテキストファイルの特定の行からパラメータを区切るためにCR
(キャリッジリターン、)を使用することにしました。\0D
ただし、このCR
文字は端末で解釈されるため、mygrep
またはcat
コマンドがほとんど役に立たなくなります。
では、端末に次のファイル(たとえば)の内容をどのように表示できますかxterm-256color
?
$ hexdump /tmp/bla
0000000 3031 3030 3020 0d20 3335 310d 3132 3830
0000010 300d 302e 3031 3030 0d30 0a33
000001c
今まで試してみましたが運がありませんでした。
$ TERM=dumb cat /tmp/bla
3.010000
答え1
GNU catには、これらの特殊文字を含むファイルを印刷するのに役立ついくつかのオプションがあります。
-v, --show-nonprinting
use ^ and M- notation, except for LFD and TAB
したがって、cat -v /tmp/bla
これはあなたの状況に従って行われるべきです。あるいは-et
、特別な方法でタブと行末を印刷することもできます。
答え2
より便利なのは、データが16進数で、0xdがキャリッジリターン(\r
または^M
)であることを識別することです。この問題を解決する方法はいくつかあります。
質問によると特定の行そして、ダンプを見ると、
script
誰かがファイル編集を変更した可能性があります。この場合、編集変更の最終結果を1行にすべて取得したい場合があります。使用できるcol
この目的のために、例えばcol /tmp/bla
col
想像ほど強力ではないが。 (私はvi-like-emacsのマニュアルページフィルタに基づくスクリプトを使用していますいいね結果 - 私の返信に簡単なスクリプトを作成しました。Unixユーティリティを使用してプログラムでANSI制御コードをファイルに「書き込み」できますか?)よりも便利ですcol
。その後、OPはこれを複数行で処理したいと思います。これを行うには、次のようにします(キャリッジリターンを改行に変換)。
tr '\r' '\n' </tmp/bla
しかし、キャリッジリターンはエスケープシーケンスではありません。どのオプションで、Cスタイルの「エスケープ」形式で表示される文字)。