我是正则表达式中的一个小说,所以我对sed头疼。 我需要帮助用“ - ”替换给定公司名称中的所有特殊字符。
所以这是给定的字符串:
FML Finanzierungs- und Mobilien Leasing GmbH & Co. KG
我想要结果:
FML-Finanzierungs-und-Mobilien-Leasing-GmbH-&-Co-KG
我尝试了以下内容:
nr = $(echo "$name" | sed -e 's/ /-/g'))
所以这用-
替换所有空格,但用什么正确的表达式替换其他空格?我通过谷歌搜索的不是很成功。
答案 0 :(得分:2)
这取决于你认为是一个特殊的角色 - 我说这是因为你似乎认为&
是一个普通角色而不是.
,这看起来有点奇怪。无论如何,我想象一下形式
nr=$(echo "$name" | sed 's/[^[:alnum:]&]\+/-/g')
会为你提供最好的服务。此处[^[:alnum:]&]
匹配任何非字母数字或&
的字符,[^[:alnum:]&]\+
匹配一个或多个此类字符的序列,因此sed
调用会替换$name
调用中的所有此类序列带有连字符的{1}}如果您认为其他字符是常规字符,请将它们添加到集合中。请注意,对变音符号等的处理取决于您的语言环境。
另请注意,如果echo
以连字符开头(可以将其解析为$name
的选项),echo
可能会造成麻烦,所以如果可以的话将自己束缚到bash
,
nr=$(sed 's/[^[:alnum:]&]\+/-/g' <<< "$name")
可能更强大。
答案 1 :(得分:1)
显然您要删除-
和.
,然后用-
替换空格。
这可以通过说sed -e 'one thing' -e 'another thing'
:
$ echo "$name" | sed -e 's/[-\.]//g' -e 's/ /-/g'
FML-Finanzierungs-und-Mobilien-Leasing-GmbH-&-Co-KG
请注意,我们会在方括号内附上我们要平等对待的所有字符:[-\.]
表示-
或.
(我们需要将其转义,否则它会匹配任何字符)。
答案 2 :(得分:1)
这样做可以帮到你:
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")
答案 3 :(得分:1)
也尝试这种方式
echo "name" | sed 's/ \|- \|\. /-/g'
OutPut:
FML-Finanzierungs-und-Mobilien-Leasing-GmbH-&-Co-KG