sed使用扩展正则表达式时, -i 要写在 -r 或 -E 的后面
前言
-r 等效 -E , 启用扩展正则表达式
-E是新叫法,更统一,能增强可移植性 , 但老系统,比如 CentOS-7 的 sed 只能用 -r
### Ubuntu24.04-E, -r, --regexp-extendeduse 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-extendeduse 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
将 -r或-E 写在 -i 之前, 如 -ri , -Ei , -Eri -rEi 就能生效扩展正则
加上 e 可以写成 -Erie , -rEie
在 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 40 上的测试
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
在 Rocky Linux 9.4 (Blue Onyx) 的测试
[root@103R94 ttt]# echo aaa > t
[root@103R94 ttt]# cat t
aaa
[root@103R94 ttt]# sed -irEe 's/a+/AAAAAAAAAAAA/g' t
[root@103R94 ttt]# cat t
aaa
[root@103R94 ttt]# sed -rEie 's/a+/AAAAAAAAAAAA/g' t
[root@103R94 ttt]# cat t
AAAAAAAAAAAA