Extract substring according to regexp with sed or grep
Try this,
sed -nE 's/^pass2:.*<(.*)>.*$/\1/p'
Or POSIXly (-E
has not made it to the POSIX standard yet as of 2019):
sed -n 's/^pass2:.*<\(.*\)>.*$/\1/p'
Output:
$ printf '%s\n' 'pass2: <Marvell Console 1.01> Removable Processor SCSI device' | sed -nE 's/^pass2:.*<(.*)>.*$/\1/p'
Marvell Console 1.01
This will only print the last occurrence of <...>
for each line.
How about -o
under grep to just print the matching part? We still need to remove the <>
, though, but tr
works there.
dmesg |egrep -o "<([a-zA-Z\.0-9 ]+)>" |tr -d "<>"
Marvell Console 1.01
I tried below 3 methods by using sed, awk and python
sed command
echo "pass2: <Marvell Console 1.01> Removable Processor SCSI device" | sed "s/.*<//g"|sed "s/>.*//g"
output
Marvell Console 1.01
awk command
echo "pass2: <Marvell Console 1.01> Removable Processor SCSI device" | awk -F "[<>]" '{print $2}'
output
Marvell Console 1.01
python
#!/usr/bin/python
import re
h=[]
k=open('l.txt','r')
l=k.readlines()
for i in l:
o=i.split(' ')
for i in o[1:4]:
h.append(i)
print (" ".join(h)).replace('>','').replace('<','')
output
Marvell Console 1.01