[英]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.