2014-02-27 124 views
0

我在bash shell中运行以下命令,试图仅返回[]中的十六进制字符和紧随其后的整数值。第一次sed电话将取代所有内容,包括[。第二个替换:]。该命令会产生所需的结果,但我希望在单个sed语句中完成此操作,即不必再次通过sed。我试过很多这两个正则表达式的组合,但一直没能找到能够产生所需结果的组合。使用sed从输出中删除不需要的字符

echo 'dot1dTpFdbPort[00:02:6f:d9:16:ca] 12' | sed 's/^.*\[//g' | sed 's/[][\:]//g' 
00026fd916ca 12 

回答

4

也许你可以尝试使用两个正则表达式有一个独特的sed命令:

echo 'dot1dTpFdbPort[00:02:6f:d9:16:ca] 12' | sed -e 's/^.*\[//g' -e 's/[][\:]//g' 

该命令会产生你想要的结果正是你想要的:只在一个SED stetment。

Saludos。

+0

这个工作非常非常感谢你。 – user3320741

+1

可以缩短为:'sed -e's /^.*\[// g; s/[] [\:] // g'' – Jotne

0

有些这样的?

echo 'dot1dTpFdbPort[00:02:6f:d9:16:ca] 12' | awk '{gsub(/[^[]*\[|]|:/,"")}8' 
00026fd916ca 12 
1
echo 'dot1dTpFdbPort[00:02:6f:d9:16:ca] 12' | sed 's/^.*\[//;s/[][\:]//g' 
+1

g不需要首先行动 – NeronLeVelu

0
echo 'dot1dTpFdbPort[00:02:6f:d9:16:ca] 12' | sed 's/://g;s/.*\[\(.*\)\]/\1/' 

相似,但基于内容提取