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 |
===================
后续会陆续补充,有新发现的也请留言提醒,我来补充

本文对比了Linux环境下的GNUsed与macOS默认的BSDsed在替换、插入、删除操作上的语法差异,并提供了具体实例帮助理解。


被折叠的 条评论
为什么被折叠?



