SED單行指令碼快速參考詳解:文字轉換和替代(6)

SED單行指令碼快速參考詳解:文字轉換和替代(6)

# 將每兩行連線成一行(類似“paste”) sed ‘$!N;s/\n/ /’

解釋:$ 最後一行 ! 不執行 N 操作,很好理解,結合過程

SED單行指令碼快速參考詳解:文字轉換和替代(6)

# 如果當前行以反斜槓“\”結束,則將下一行併到當前行末尾 # 並去掉原來行尾的反斜槓 sed -e :a -e ‘/\\$/N; s/\\\n//; ta’

SED單行指令碼快速參考詳解:文字轉換和替代(6)

# 如果當前行以等號開頭,將當前行併到上一行末尾 # 並以單個空格代替原來行頭的“=” sed -e :a -e ‘$!N;s/\n=/ /;ta’ -e ‘P;D’

解釋:沒什麼好解釋的,最後一行不執行 N s///替換掉\n= 為 空格,t標籤迴圈。這裡的P和D的作用無非就是看下圖,如果不寫D的話,結尾會列印兩次,一次是P,列印\n之前的內容,也就是 “a b”, 接下來PATT 空間預設列印一次 “a b\nc”,所以加一個D,刪除重複打印出來的部分“a b”。

SED單行指令碼快速參考詳解:文字轉換和替代(6)

# 為數字字串增加逗號分隔符號,將“1234567”改為“1,234,567” gsed ‘:a;s/\B[0-9]\{3\}\>/,&/;ta’ # GNU sed sed -e :a -e ‘s/\(。*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta’ # 其他sed

解釋:迴圈標籤,正則匹配,透過劃域實現逗號分隔。

(。*[0-9]) “*” 表示零個或者多個字元 + 一個數字,而

([0-9]{3})表示三個數字,然後不停的替換,直到條件失敗結束

SED單行指令碼快速參考詳解:文字轉換和替代(6)

# 為帶有小數點和負號的數值增加逗號分隔符(GNU sed) gsed -r ‘:a;s/(^|[^0-9。])([0-9]+)([0-9]{3})/\1\2,\3/g;ta’

解釋:邏輯跟上邊差不多,也是正則匹配,替換,直到條件失敗

# 在每5行後增加一空白行 (在第5,10,15,20,等行後增加一空白行) gsed ‘0~5G’ # 只對GNU sed有效 sed ‘n;n;n;n;G;’ # 其他sed

解釋: 我這裡寫了2個,方便截圖看過程,無非就是讀入下一行,直到執行到 G,在從頭迴圈。

SED單行指令碼快速參考詳解:文字轉換和替代(6)

個人從事IT運維工作多年,目前就職於國內唯一Zabbix代理的公司宏時資料,有使用Zabbix超過一萬小時的經驗,我會不定期釋出一些IT相關的技術內容與大家分享,有感興趣的朋友可以關注我,希望你能有一些收穫。