sed使用扩展正则表达式时, -i 要写在 -r 或 -E 的后面
前言
-r 等效 -E , 启用扩展正则表达式
-E是新叫法,更统一,能增强可移植性 , 但老系统,比如 CentOS-7 的 sed 只能用 -r
### Ubuntu24.04
-E, -r, --regexp-extended
use extended regular expressions in the script
(for portability use POSIX -E).
### CentOS7.9
-r, --regexp-extended
在脚本中使用扩展正则表达式
### Fedora39
-E, -r, --regexp-extended
在脚本中使用扩展正则表达式
(为保证可移植性使用 POSIX -E)。
### Rocky Linux 9.1 (Blue Onyx)
-E, -r, --regexp-extended
use extended regular expressions in the script
(for portability use POSIX -E).
-
sed在未开启扩展正则前, 使用
+加号 和?问号, 前面要加上反斜杠\才能表示 一多(\+) 和 零一(\?) 在开启扩展正则后, 不用加反斜杠\ -
-i是将结果保存到文件 -
新版本 r 和 E 可以都写上
-r,-E,-rE,-Er都可以
经测试, 如果将 -i 写在 -r或-E之前, 则扩展正则不会生效 , 如 -ir , -iE , irE
在 CentOS-7.9 上的测试
[root@3050 ttt]# echo aaa > t
[root@3050 ttt]# cat t
aaa
[root@3050 ttt]# sed -ire 's/a+/bbbbbbbbbb/g' t
[root@3050 ttt]# cat t
aaa
[root@3050 ttt]# sed -rie 's/a+/bbbbbbbbbb/g' t
[root@3050 ttt]# cat t
bbbbbbbbbb
在 Ubuntu-24.04 上测试
root@TxCloud:~/ttt# echo aaa > t
root@TxCloud:~/ttt# ls
t
root@TxCloud:~/ttt# cat t
aaa
root@TxCloud:~/ttt# sed -ir 's/a+/bbbbbbbbb/g' t
root@TxCloud:~/ttt# cat t
aaa
root@TxCloud:~/ttt# sed -iE 's/a+/bbbbbbbbb/g' t
root@TxCloud:~/ttt# cat t
aaa
root@TxCloud:~/ttt# sed -iEr 's/a+/bbbbbbbbb/g' t
root@TxCloud:~/ttt# cat t
aaa
root@TxCloud:~/ttt# sed -Eri 's/a+/bbbbbbbbb/g' t
root@TxCloud:~/ttt# cat t
bbbbbbbbb
在 Rocky Linux 9.1 (Blue Onyx) 的测试
[root@u16slc ttt]# echo 111 > t
[root@u16slc ttt]# ls
t
[root@u16slc ttt]# cat t
111
[root@u16slc ttt]# sed -ir 's/1+//g' t
[root@u16slc ttt]# cat t
111
[root@u16slc ttt]# sed -iE 's/1+//g' t
[root@u16slc ttt]# cat t
111
[root@u16slc ttt]# sed -iEr 's/1+//g' t
[root@u16slc ttt]# cat t
111
[root@u16slc ttt]# sed -irE 's/1+//g' t
[root@u16slc ttt]# cat t
111
[root@u16slc ttt]# sed -rEi 's/1+//g' t
[root@u16slc ttt]# cat t
[root@u16slc ttt]#
在 Fedora 39 上的测试
root@n1-40-2-6:~/ttt# echo 111 > t
root@n1-40-2-6:~/ttt# cat t
111
root@n1-40-2-6:~/ttt# sed -iE 's/1+/222222222222222222222222/g' t
root@n1-40-2-6:~/ttt# cat t
111
root@n1-40-2-6:~/ttt# sed -Ei 's/1+/222222222222222222222222/g' t
root@n1-40-2-6:~/ttt# cat t
222222222222222222222222