我试图用sed解析MAC地址,但我遇到了一些我无法解释的问题。
这里有两个例子 - 好的和坏的:
好的一个:# echo "01:23:45:67:89:ab" | sed -r 's/^([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2})$/\1_\2_\3_\4_\5_\6/'
01_23_45_67_89_ab
错误的一个:
# echo "tadam" | sed -r 's/^([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2}):([^:]{2})$/\1_\2_\3_\4_\5_\6/'
tadam
第一个例子工作正常 - 它返回正确解析的字符串。但是如何解释第二个呢?为什么sed会返回任何字符串(tadam),而这个字符串与te regexp不匹配?
任何人都可以解释一下吗?我希望实现当正则表达式与字符串不匹配时sed没有返回任何内容的情况。怎么做?
答案 0 :(得分:2)
sed的默认设置是打印完整的模式空间。
添加选项-n
(禁止打印模式空间)并添加命令p
(打印当前模式空间):
echo "..." | sed -r -n 's/.../.../p'
现在sed只打印模式空间,如果有东西可以替换。