[問題] 請教換行符號取代的問題

作者: hirokofan (笠原弘子 命!)   2020-01-06 19:58:06
為了將RouterOS的dhcp lease紀錄整合成一行想要寫個script去處理結果碰到問題
紀錄檔如下
3 D address=10.1.1.1 mac-address=FF:FF:FF:FF:FF:FF
client-id="1:ff:ff:ff:ff:ff:ff" address-lists="" server=dhcp-local
dhcp-option="" status=bound expires-after=7h36m38s last-seen=23m22s
active-address=10.1.1.1 active-mac-address=FF:FF:FF:FF:FF:FF
active-client-id="1:ff:ff:ff:ff:ff:ff" active-server=dhcp-local
host-name="VOIP_PHONE"
*紀錄中每一行最後有一個空格,換行後最前面有五個空格
兩筆紀錄中間有一個空行,這個空行沒有空格
簡單的說就是要把 20 0A 20 20 20 20 20 變成一個 20,於是我用下面兩種方法
sed -i 's/\x0a\x20\x20\x20\x20\x20//g' dhcp-lease.txt
sed -i 's/\x20\x0A//g' dhcp-lease.txt
但結果是只有空格會被取代,換行符號不會被處理( \x0a 改成 \n 也一樣)
試了半天只有 tr 可以處理掉換行( \012 ),後來是分成三步驟取代才成功
tr -s "\012" "\011" < dhcp-lease.txt >temp2.txt
sed 's/ \x09 //g' temp2.txt >temp3.txt
sed 's/\x09/\n/g' temp3.txt >temp4.txt
但總覺得這樣子不漂亮,是否有更好的解法可以參考?
作者: Gold740716 (項為之強)   2020-01-06 22:13:00
sed ':start / $/ { N; s/\n //; b start }'sed 一次讀一行,並刪掉結尾的換行符,基本上匹配不到換行符,要手動用 N 讀下一行,或是用 sed -z
作者: hirokofan (笠原弘子 命!)   2020-01-07 06:41:00
感謝~
作者: bamchisu (suchi)   2020-01-07 10:02:00
有強者給推

Links booklink

Contact Us: admin [ a t ] ucptt.com