用sed替换一个以上特殊字符

米尔科·布鲁纳(Mirko Brunner)

我是正则表达式中的Nooby,所以我对sed感到头疼。我需要帮助,将给定公司名称中的所有特殊字符替换为“-”。

因此,这是给定的字符串:

FML Finanzierungs- und Mobilien Leasing GmbH & Co. KG

我想要结果:

FML-Finanzierungs-und-Mobilien-Leasing-GmbH-&-Co-KG

我尝试了以下方法:

nr = $(echo "$name" | sed -e 's/ /-/g'))

所以用替换所有空格-,但是用什么表达式替换其他空格呢?我通过Google进行的搜索不是很成功。

温特穆特

这取决于您认为是特殊字符的原因-之所以这样说,是因为您似乎是在考虑&常规字符,但不是.,这似乎有些奇怪。无论如何,我想像某种形式

nr=$(echo "$name" | sed 's/[^[:alnum:]&]\+/-/g')

会为您提供最好的服务。此处[^[:alnum:]&]匹配不是字母数字或的任何字符&,并[^[:alnum:]&]\+匹配一个或多个此类字符的序列,因此该sed调用将所有此类序列替换$name为连字符。如果您认为其他字符是常规字符,则将它们添加到集合中。请注意,变音符号等的处理取决于您的区域设置。

另请注意,如果以连字符开头(可能会被解析为的选项),则echo 可能会造成麻烦,因此,如果您可以将自己束缚于$nameechobash

nr=$(sed 's/[^[:alnum:]&]\+/-/g' <<< "$name")

可能会更强大。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章