使用sed从输出中删除不需要的字符

时间:2014-02-27 19:32:28

标签: regex bash shell sed

我在bash shell中运行以下命令,试图仅返回[]内的十六进制字符和紧随其后的整数值。第一个sed调用取代了[之前的所有内容。第二个替换:]。该命令产生了所需的结果,但我想在单个sed语句中完成此操作,即无需第二次通过sed。我尝试了这两个正则表达式的很多组合但是却找不到能产生所需结果的组合。

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

4 个答案:

答案 0 :(得分:4)

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

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

该命令可以产生您想要的结果:只有一个sed stetment。

Saludos。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

有人这样吗?

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

答案 3 :(得分:0)

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

类似但基于内容提取