Reputation: 45
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
Upvotes: 0
Views: 211
Reputation: 3121
echo 'dot1dTpFdbPort[00:02:6f:d9:16:ca] 12' | sed 's/^.*\[//;s/[][\:]//g'
Upvotes: 1
Reputation: 10039
echo 'dot1dTpFdbPort[00:02:6f:d9:16:ca] 12' | sed 's/://g;s/.*\[\(.*\)\]/\1/'
similar but based on content extraction
Upvotes: 0
Reputation: 56
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.
Upvotes: 4
Reputation: 41460
Some like this?
echo 'dot1dTpFdbPort[00:02:6f:d9:16:ca] 12' | awk '{gsub(/[^[]*\[|]|:/,"")}8'
00026fd916ca 12
Upvotes: 0