sed 字符串替换标志(GNU SED 独有)
字符串替换标志(
flag
)是 GNU SED 独有的。
如果你使用的是 Linux 系统,比如 Ubuntu、CentOS、RedHat、Debain 等系统则可以直接使用。 如果你使用的是 Mac 苹果电脑,那么必须使用gsed
,自带的sed
是没法使用的。
在前面的章节中,我们学习了 sed 中的 替换命令。也就是单字母 s
命令。
但这种替换非常的生硬,比如我们想把 TWLE.CN
全部替换为小写,我们必须自己去硬编码为 twle.cn
。
s/TWLE.CN/twle.cn
如果有多个匹配,我们岂不是要写到手软?
这种简单的转换,sed 不能有一个特殊字符来自动处理么?
为了解决这种手软到的问题, GNU sed 为字符串替换命令添加了一些特殊字符,哦,特殊标志 ( flag )。
本章节,我们就来讲讲几个重要的。
-
\l
\l
标志用于指示后面出现的第一个字母转换为 小写。例如\lTWLE.cn
的效果为tWLE.cn
。范例
下面的 sed 命令使用
\l
将字母T
转换为t
。[www.twle.cn]$ echo "I love www.TWLE.cn " | sed -n 's/www.TWLE.cn/www.\lTWLE.cn/p'
运行上面的命令,输出结果如下
I love www.tWLE.cn
-
\L
\L
标志用于指示后面出现的所有字母都转换为 小写。例如\LTWLE.Cn
的效果为twle.cn
。范例
下面的范例,我们将
www.TWLE.Cn
全部替换为小写。[www.twle.cn]$ echo "I love www.TWLE.Cn " | sed -n 's/www.TWLE.Cn/\L&/p'
运行上面的命令,输出结果如下
I love www.twle.cn
还记得 符号(
&
) 的作用吗?不记得的话,请移步 sed 特殊字符命令 & -
\u
\u
标志用于指示后面出现的第一个字母转换为 大写。例如\utwle.cn
的效果为Twle.cn
。范例
下面的 sed 命令使用
\u
将字母t
转换为T
。[www.twle.cn]$ echo "I love www.twle.cn " | sed -n 's/www.twle.cn/www.\utwle.cn/p'
运行上面的命令,输出结果如下
I love www.Twle.cn
-
\U
\U
标志用于指示后面出现的所有字母都转换为 大写。例如\Utwle.cn
的效果为TWLE.CN
。范例
下面的范例,我们将
www.twle.cn
全部替换为大写。[www.twle.cn]$ echo "I love www.twle.cn " | sed -n 's/www.twle.cn/\U&/p'
运行上面的命令,输出结果如下
I love WWW.TWLE.CN
-
\E
\E
标志必须和\L
或\U
一起使用。\E
标志用于取消\L
或\U
开启的特殊效果,也就是\E
字符之后,\L
或\U
的设定不再起作用。范例
下面的替换中,只有第一个单词会被替换为 大写字母。
[www.twle.cn]$ echo "I love twle.cn " | sed -n 's/twle/\Uwww.\Etwle/p'
运行上面的命令,输出结果如下
I love WWW.twle.cn