
使用腳本時我遇到了這個問題,大多數時候當我運行腳本時,這是我得到的輸出檔案:
device_id,ip_address,serial_number
SEP0c1167231746, 148.000.000.32
SEP0c1167223fa5, 148.000.000.30
SEP0c1167224170, 148.000.000.30
SEP0c1167231d2e, 148.000.000.194
SEP0c1167233b9f, 148.000.000.31
CUV, 148.000.000.254
SEP0c1167231d32, 148.000.000.34
SEP501cbffcfa9c, 148.000.000.24
SEP00082fb67d5f, 148.000.000.21
SEP00082fb67701, 148.000.000.22
這正是我所期望的,但有時文件看起來像這樣:
device_id,ip_address,serial_number
SEP0c1167231746
, 148.000.000.32
SEP0c1167223fa5
, 148.000.000.30
SEP0c1167224170
, 148.000.000.30
SEP0c1167231d2e
, 148.000.000.194
SEP0c1167233b9f
, 148.000.000.31
CUV
, 148.000.000.254
SEP0c1167231d32
, 148.000.000.34
SEP501cbffcfa9c
, 148.000.000.24
SEP00082fb67d5f
, 148.000.000.21
SEP00082fb67701
, 148.000.000.22
我試圖弄清楚發生了什麼事,但它似乎不正常,現在我只想處理這個問題,使用 Ghex 我已經識別出導致問題的字元。
現在我想用 Null 替換所有“0D”並保留所有“0A”
作為一個註釋,我嘗試使用“dos2unix”,但它不起作用。
你可以幫幫我嗎?
更新:使用: sed -n -e '/,/!{N;s/\n//;}; /,/p'輸入
與這樣的文件:
device_id,ip_address,serial_number
SEP0c1167231746
, 148.000.000.32
,
SEP0c1167223fa5
, 148.000.000.30
,
SEP0c1167224170
, 148.000.000.30
,
SEP0c1167231d2e
, 148.000.000.194
,
SEP0c1167233b9f
, 148.000.000.31
,
CUV
, 148.000.000.254
,
SEP0c1167231d32
, 148.000.000.34
,
SEP501cbffcfa9c
, 148.000.000.24
,
SEP00082fb67d5f
, 148.000.000.21
,
SEP00082fb67701
, 148.000.000.22
我有這個輸出:
, 148.000.000.32
, 148.000.000.30
, 148.000.000.30
, 148.000.000.194
, 148.000.000.31
, 148.000.000.254
, 148.000.000.34
, 148.000.000.24
, 148.000.000.21
, 148.000.000.22
答案1
可能有更好的sed
選擇,但這裡有一個:
sed -n -e '/,/!{N;s/\n//;}; /,/p' input > output
它說,(預設情況下,不列印行):如果行中有逗號,則讀取下一個換行並替換換行符。然後,如果該行中(現在或已經)有逗號,則列印該行。它從 讀取input
並寫入output
。對於某些 sed,您可以使用 sed 的-i
標誌就地編輯文件。
輸入範例:
device_id,ip_address,serial_number
SEP0c1167231746, 148.000.000.32
SEP0c1167223fa5, 148.000.000.30
SEP0c1167231746
, 148.000.000.32
SEP0c1167223fa5
, 148.000.000.30
範例輸出:
device_id,ip_address,serial_number
SEP0c1167231746, 148.000.000.32
SEP0c1167223fa5, 148.000.000.30
SEP0c1167231746, 148.000.000.32
SEP0c1167223fa5, 148.000.000.30
答案2
查看您的十六進制轉儲,這似乎應該可以解決您的問題:
tr -d '\015' < input > log
因為八進制\015
是carriage return
^M
字元。
為什麼dos2unix
沒有幫助是因為查看您的案例中不存在的dos2unix
序列。\r\n