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 |
===================
後續會陸續補充,有新發現的也請留言提醒,我來補充