繁体   English   中英

用sed替换多个特殊字符

[英]replace more than one special character with sed

我是正则表达式中的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带有连字符。 如果您认为其他字符是常规字符,请将它们添加到集合中。 请注意,变音符号等的处理取决于您的区域设置。

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

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

可能会更强大。

显然,您要删除-. 然后用-替换空格。

通过说sed -e 'one thing' -e 'another thing'可以做到这sed -e 'one thing' -e 'another thing'

$ echo "$name" | sed -e 's/[-\.]//g' -e 's/ /-/g'
FML-Finanzierungs-und-Mobilien-Leasing-GmbH-&-Co-KG

请注意,我们将所有要平等对待的字符括在方括号内: [-\\.]表示-. (我们需要对其进行转义,否则它将与任何字符匹配)。

这样可以帮助您:

awk -vOFS=- '{gsub(/[.-]/,"");$1=$1}1' <<< "$name"
FML-Finanzierungs-und-Mobilien-Leasing-GmbH-&-Co-KG

gsub(/[.-]/,"")删除. _
-vOFS=-将新的字段分隔符设置为-
$1=$1重建行,因此使用新的字段分隔符
1打印行。

使其成为变量

nr=$(awk -vOFS=- '{gsub(/[.-]/,"");$1=$1}1' <<< "$name")

也尝试这种方式

echo "name" | sed 's/ \|- \|\. /-/g'

输出:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM