【指導】sed - GNU vs BSD

linux 環境下多用 GNU sed, mac OS 默認使用的 BSD sed。二者語法或多或少均有差異,僅以此文記錄碰到的坑:

1,sed -i

 linux   sed -i 's/old/new/g' file 
 mac OS   sed -i '' 's/old/new/g' file # 加空串是因爲這裏的sed強制要求備份 


 

2,插入行

 linux   sed -i "/startline/a\\$string" file # 行後追加   sed -i "/endline/i\\$string" file # 行前插入 
 mac OS 

 sed -i "" -e "/startline/a\\

 $string" file #  行後追加,需要加-e和換行 

 sed -i ""-e "/endline/i\\

 $string" file # 行前插入,需要加-e和換行






3,刪除行

a) 刪除匹配行中間的部分:

 linux   sed '/PATTERN-1/,/PATTERN-2/{//!d}' file 
 mac OS   sed '/PATTERN-1/,/PATTERN-2/{//!d;}' file # 花括號前多加個分號,以避免 extra characters at the end of d command 錯誤 



b) 刪除匹配行及中間的部分:

 linux & mac OS   sed '/PATTERN-1/,/PATTERN-2/d' file 


c) 刪除匹配行及之後的部分:

 linux & mac OS   sed '/PATTERN-1/,$d' file 


d) 刪除特定行號直接的部分(如2-4行):

 linux & mac OS   sed '2,4d' file 


===================

後續會陸續補充,有新發現的也請留言提醒,我來補充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章