web-dev-qa-db-ja.com

ログファイルから^ M文字を削除

ログファイルから^ M文字を削除します。

スクリプトでは、プログラムの出力をログファイルにリダイレクトします。ログファイルの出力に、^ M(改行)文字が含まれています。実行中に削除する必要があります。

私のコマンド:

$ Java -jar test.jar >> test.log 

test.logには以下があります。

開始スクリプト... ^ M開始スクリプト...初期化中

5
Ram

スタンドアロンファイルの変換

次のコマンドを実行すると、

$ dos2unix <file>

<file>では、すべての^ M文字が削除されます。 <file>をそのまま残したい場合は、次のようにdos2unixを実行します。

$ dos2unix -n <file> <newfile>

コマンドからの出力の解析

パイプを介して一連のコマンドの一部としてそれらを実行する必要がある場合は、trsedawk、またはPerlなどのツールをいくつでも使用できます。

tr

$ Java -jar test.jar | tr -d '^M' >> test.log

sed

$ Java -jar test.jar | sed 's/^M//g' >> test.log

awk

$ Java -jar test.jar | awk 'sub(/^M/,"")' >> test.log

Perl

$ Java -jar test.jar | Perl -p -e 's/^M//g' >> test.log

^ Mと入力

^Mを入力するときは、次のいずれかの方法で入力してください。

  1. なので ControlvM ではなく Shift6M
  2. バックスラッシュr、つまり(\r)として。
  3. 8進数(\015)として。
  4. 16進数として(\x0D)。

なぜこれが必要なのですか?

^Mは、Windowsプラットフォームでの行末の終端方法の一部です。行の各終わりは、復帰文字とそれに続く改行文字で終了します。

Unixシステムでは、行末は改行文字だけで終了します。

  • 改行文字= 0x0A(16進数)。\nとも表記されます。
  • 復帰文字= 0x0D(16進数)、\rとも表記。

これらの出力は、odhexdumpなどのツールにパイプで出力すると確認できます。次に、改行キャリッジリターン+ラインフィード文字を含むサンプルファイルを示します。

$ cat sample.txt
hi there
bye there

\r + \nとして、hexdumpでそれらを表示できます。

$ hexdump -c sample.txt 
0000000   h   i       t   h   e   r   e  \r  \n   b   y   e       t   h
0000010   e   r   e  \r  \n                                            
0000015

または、16進数として0d + 0a

$ hexdump -C sample.txt 
00000000  68 69 20 74 68 65 72 65  0d 0a 62 79 65 20 74 68  |hi there..bye th|
00000010  65 72 65 0d 0a                                    |ere..|
00000015

これをsed 's/\r//g'で実行:

$ sed 's/\r//g' sample.txt |hexdump -C
00000000  68 69 20 74 68 65 72 65  0a 62 79 65 20 74 68 65  |hi there.bye the|
00000010  72 65 0a                                          |re.|
00000013

sed0d文字を削除したことがわかります。

変換せずに^ Mでファイルを表示しますか?

はい、vimを使用してこれを行うことができます。上記のようにファイルを変換する効果を持つvimでfileformat設定を設定するか、vimビューでファイル形式を変更できます。

ファイルの形式の変更

:set fileformat=dos
:set fileformat=unix

省略表記も使用できます。

:set ff=dos
:set ff=unix

または、ビューのファイル形式を変更することもできます。このアプローチは非破壊的です。

:e ++ff=dos
:e ++ff=unix

ここで、vim^Mファイルsample.txtを開いているところを確認できます。

ss of vim dos #1

今、私はビューでファイル形式を変換しています:

ss of vim dos #2

unixファイル形式に変換すると、次のようになります。

ss of vim dos #3

参考文献

17
slm

dos2unixを介してファイルを移動し、行末を修正します。

または、次のいずれかを使用します。

sed 's,\r$,,'
tr -d '\r'

isatty()を呼び出すようにプログラムを修正する必要があります。stdoutがttyでない場合は、^ Mを出力しないでください。

1
psusi

特別な標識なしの^ Mの削除:

$ tr -d '\015' <file1 >file2 

$ mv file2 file1
0
42n4