ログファイルから^ M文字を削除します。
私のスクリプトはプログラムの出力をログファイルにリダイレクトします。マイログファイルの出力には、いくつかの^ M(改行)文字が含まれています。実行時に削除する必要があります。
私のコマンド:
$ java -jar test.jar >> test.log
test.log
持っている:
起動スクリプト...^ M起動スクリプト...初期化
ベストアンサー1
スタンドアロンファイル変換
次のコマンドを実行すると:
$ dos2unix <file>
<file>
すべての^ M文字が削除されます。<file>
そのままにするには、dos2unix
次のように実行します。
$ dos2unix -n <file> <newfile>
コマンドの出力を解析します。
パイプラインを介してコマンドチェーンの一部として実行する必要がある場合は、必要な数のツール(たとえば、tr
または)を使用できます。sed
awk
perl
ティー
$ java -jar test.jar | tr -d '^M' >> test.log
sed
$ java -jar test.jar | sed 's/^M//g' >> test.log
アッ
$ java -jar test.jar | awk 'sub(/^M/,"")' >> test.log
真珠
$ java -jar test.jar | perl -p -e 's/^M//g' >> test.log
^Mと入力してください。
入力時に必ず^M
次のいずれかの方法で入力してください。
- Control++の代わりに++で。vMShift6M
- バックスラッシュrは(
\r
)です。 - 8進数(
\015
)で表されます。 - 16進数(
\x0D
)で表されます。
これはなぜ必要ですか?
これは、^M
Windowsプラットフォームで行末の終了を実行する方法の一部です。各行はキャリッジリターンと改行文字で終わります。
Unixシステムでは、行末は改行文字でのみ終了します。
- newline=
0x0A
hex、として作成されます\n
。 0x0D
16進キャリッジリターン文字=とも呼ばれます\r
。
はい
.od
次hexdump
は、キャリッジリターン+改行文字で終わる行を含むサンプルファイルです。
$ cat sample.txt
hi there
bye there
hexdump
+を使って見ること\r
ができます\n
。
$ 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
sed
その役割が削除されたことを確認できます0d
。
変換せずにファイルを表示するには^ Mを使用しますか?
はい、これを行うために使用できますvim
。fileformat
上記のようにファイルを変換する効果をvimで設定することも、viewでファイル形式を変更することもできますvim
。
ファイル形式の変更
:set fileformat=dos
:set fileformat=unix
短縮表記法も使用できます。
:set ff=dos
:set ff=unix
あるいは、ビューのファイル形式のみを変更することもできます。このアプローチは非破壊的です。
:e ++ff=dos
:e ++ff=unix
^M
ここで私がファイルを開くのsample.txt
を見ることができますvim
。
ビューからファイル形式を変換します。
ファイル形式に変換した後の様子は次のとおりですunix
。