Using sed to remove unwanted characters from outpu

2019-09-07 04:26发布

I am running the following command in a bash shell in an attempt to return only the hexadecimal characters inside the [] and the integer value immediately following. The first sed call replaces everything up to and including the [. The second replaces : and ]. The command produces the desired result however I'd like to accomplish this in a single sed statement, i.e. without having to pipe through sed a second time. I've attempted a good many combinations of these two regex expressions but have not been able to find a combination that produces the desired result.

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

4条回答
冷血范
2楼-- · 2019-09-07 05:01

Some like this?

echo 'dot1dTpFdbPort[00:02:6f:d9:16:ca] 12' | awk '{gsub(/[^[]*\[|]|:/,"")}8'
00026fd916ca 12
查看更多
乱世女痞
3楼-- · 2019-09-07 05:19
echo 'dot1dTpFdbPort[00:02:6f:d9:16:ca] 12' | sed 's/://g;s/.*\[\(.*\)\]/\1/'

similar but based on content extraction

查看更多
祖国的老花朵
4楼-- · 2019-09-07 05:22
echo 'dot1dTpFdbPort[00:02:6f:d9:16:ca] 12' | sed 's/^.*\[//;s/[][\:]//g'
查看更多
爱情/是我丢掉的垃圾
5楼-- · 2019-09-07 05:23

maybe you can try using the two regex with one unique sed command:

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

That command produces your desired result exactly what you want: in only one sed stetment.

Saludos.

查看更多
登录 后发表回答