Shell
從日誌文件中刪除 ^M 字元
從日誌文件中刪除 ^M 字元。
在我的腳本中,我將程序的輸出重定向到日誌文件。我的日誌文件的輸出包含一些 ^M(換行符)字元。我需要在執行時刪除它們。
我的命令:
$ java -jar test.jar >> test.log
test.log
擁有:開始腳本 … ^M 開始腳本 …正在初始化
轉換獨立文件
如果您執行以下命令:
$ 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
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
務必以下列方式之一輸入:
- 作為
Control
++而不是++ 。v
_M``Shift``6``M
- 作為反斜杠 r,即 (
\r
)。- 作為八進制數 (
\015
)。- 作為十六進制數 (
\x0D
)。為什麼這是必要的?
這
^M
是在 Windows 平台上如何終止行尾的一部分。每一行的結尾都以輸入符和換行符結束。在 Unix 系統上,行尾僅由換行符終止。
- 換行符 =
0x0A
十六進制,也寫為\n
.- 輸入符 =
0x0D
十六進制,也寫為\r
.例子
如果將輸出通過管道傳輸到諸如
od
或之類的工具,則可以看到這些hexdump
。這是一個帶有行終止輸入符+換行符的範例文件。$ cat sample.txt hi there bye there
您可以使用
hexdump
as\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
或者作為他們的十六進制
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 中設置設置,這將產生像我們上面所做的那樣轉換文件的效果,或者您可以在vim
視圖中更改文件格式。改變文件的格式
:set fileformat=dos :set fileformat=unix
您也可以使用速記符號:
:set ff=dos :set ff=unix
或者,您可以只更改視圖的文件格式。這種方法是無損的:
:e ++ff=dos :e ++ff=unix
在這裡你可以看到我打開我們的
^M
文件,sample.txt
在vim
:
現在我在視圖中轉換文件格式:
這是轉換為文件格式後的樣子
unix
:
參考