sed和解析MAC地址

时间:2017-10-19 05:10:33

标签: linux bash sed

我试图用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没有返回任何内容的情况。怎么做?

1 个答案:

答案 0 :(得分:2)

sed的默认设置是打印完整的模式空间。

添加选项-n(禁止打印模式空间)并添加命令p(打印当前模式空间):

echo "..." | sed -r -n 's/.../.../p'

现在sed只打印模式空间,如果有东西可以替换。