【发布时间】:2013-11-29 05:06:17
【问题描述】:
我正在尝试验证一些输入以删除一组字符。只允许使用字母数字字符加号、句点、下划线、连字符。我已经测试了正则表达式 [^\w.-] 这里 http://gskinner.com/RegExr/ 并且它与我想要删除的内容相匹配,所以我不确定为什么 sed 会返回相反的结果。我错过了什么?
我的最终目标是输入"Â10.41.89.50 " 并得到"10.41.89.50"。
我试过了:
echo "Â10.41.89.50 " | sed s/[^\w.-]//g 返回Â...
echo "Â10.41.89.50 " | sed s/[\w.-]//g 和 echo "Â10.41.89.50 " | sed s/[\w^.-]//g 返回 Â10418950
我尝试在Skip/remove non-ascii character with sed 找到答案,但没有删除任何内容。
【问题讨论】:
-
尝试将
-r选项添加到sed,以便它能够识别扩展的正则表达式。 -
sed不理解像\w这样的特殊字符类。只需使用[a-zA-Z0-9_-]。 -
-r和使用[a-zA-Z0-9_-]都不起作用。好吧,echo "Â10.41.89.50 " | sed s/[a-zA-Z0-9.-]//g返回了Â,但echo "Â10.41.89.50 " | sed s/[^a-zA-Z0-9.-]//g仍然返回了Â10.41.89.50。