chrish@dhcp3 [338]$ echo "This is a test" | sed -e s/[aeiouy]/_/g
Th_s _s _ t_st
请注意,示例中使用了 g 标志,以便将模式/替换应用于所有的匹配项,而不仅仅是第一个匹配项。
sed 命令也可以理解 tr 命令所支持的那些命名字符类,POSIX 对这些字符类进行了定义,但是本文中的语法稍有不同。清单 10 显示了如何替换任何空白字符(制表符、空格等等):
清单 10. 根据命名字符类匹配内容
chrish@dhcp3 [345]$ echo -e 'hello there'
hello there
chrish@dhcp3 [346]$ echo -e 'hello there' | sed -e 's/[[:space:]]/, /'
hello, there
echo 命令的 -e 标志用来告诉该命令扩展 C 风格的转义字符,在本示例中,它会把 转换为制表符。
您还可以使用“.(点号)匹配任何单个的字符。如果您需要处理一些略有变化的数据,或者包含难以进行转义的特殊字符的数据,那么使用这个符号是非常方便的。例如,在匹配引号时,我经常使用 .,所以我不需要在 Shell 中对引号进行转义。清单 11 显示了一个正则表达式初学者在使用这个模式时出现的问题。
清单 11. 这可能并不是想要的结果
chrish@dhcp3 [339]$ echo "This is a test" | sed -e s/./_/g
______________
既然您已经了解了这些非常基本的内容,下面介绍一些附加模式修饰符,要使用高级 正则表达式,您现在还可以使用 -E 选项代替 -e。? 字符表示匹配前面模式元素的零个或一个实例,* 字符表示匹配前面元素的零个或多个实例。+ 字符表示匹配一个或多个前面的元素。^ 字符匹配行首,而 $ 则匹配行尾。清单 12 显示了实际应用中的情况。
标签: