SED:Mac 和 Linux(GNU)的区别
主要区别:
- 在 Linux 下,
-i
可不不带参数,等价于-i ''
;而 Mac 下,-i
一定要带参数,需要明确指定不备份,最大的区别-i
:如果传入非空的参数,表示修改原文的时候会备份,并且在文件后,将该参数作为备份文件名后缀,下面是例子:sed -i '.bk' ‘s/1/2/g’ foo.c
,会先将foo.c
备份成foo.c.bk
,然后在foo.c
执行修改操作;sed -i ‘s/1/2/g’ foo.c
(在 Mac 下,sed -i '' ‘s/1/2/g’ foo.c
),就不会备份,直接修改foo.c
的文件;
- Mac 下的
sed
仅支持基本正则表达式(BRE),而 Linux 下,支持扩展正则表达式(ERE)- ERE 是兼容的 BRE,并且我们目前的习惯,还是使用 BRE,所以它们两者间区别不到
- ERE 和 BRE 的区别,主要在于 ERE 不需要对特殊字符进行转移,看起来简洁很多,而使用 BRE 的时候,会看到大量的反斜杠
\
,举个例子:- 在 BRE 中,要匹配括号
()
,需要使用\(
和\)
进行转义,在 ERE 中,括号()
不需要转义。 - 元字符如
*
,+
,?
,|
,在 BRE 下不具备特殊含义,需要加上反斜杠才行,而 ERE 默认就具备特殊含义了。
- 在 BRE 中,要匹配括号