繁体   English   中英

sed无法正常工作,从字符串中间删除了特殊字符

[英]sed not working as expected, removing special character from middle of string

我有一个包含内容的文件“ test”:

sa!ve
hel!lo
te!st
te!ve
help!
please!

我想删除两个小写字母之间的任何感叹号。 因此结果应为:

save
hello
test
teve
help!
please!

我试过cat test | sed 's/\\([:lower:]\\)\\!\\([:lower:]\\)/\\1\\2/g' cat test | sed 's/\\([:lower:]\\)\\!\\([:lower:]\\)/\\1\\2/g'和alpha / alphanum但很奇怪,它仅适用于单词“ hel!lo”除此以外,我的结果是:

sa!ve
hello
te!st
te!ve
help!
please!

不知道为什么它对其他词不起作用。

问题是您使用的字符类不正确。 [:lower:] 是字符集的名称 ,因此实际上您会像[[:lower:]]这样使用它。

因此,正确的sed表达式为:

cat test |  sed 's/\([[:lower:]]\)\!\([[:lower:]]\)/\1\2/g'

哪个按预期工作。

这是我得到的输出:

save
hello
test
teve
help!
please!

因此,您可以将[:lower:]视为az 简写 ,因此在动态创建字符时,该字符将成为[[:lower:]] 这是一个棘手的问题,很多人被前两次咬伤。

您正在使用字符类,因此[:lower:]将放在方括号内的任何单个字符。 在您的输入中,只有l (在字符类:lower: )被匹配,以便被替换。

将其更改为字符范围[az]以匹配该范围内的任何小写字母。

cat test | sed 's/\([a-z]\)\!\([a-z]\)/\1\2/g'

暂无
暂无

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

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