sed extracting numbers

I have number 192.168.21.8.

I want to extract from this number with sed 21 and 8 to variables a and b. Any Ideas?

I did like 's/\(192.168.\)/ /' but its wrong :frowning:

Longhand using OSX 10.7.5, default bash terminal, without the use of sed...

Last login: Fri Oct 11 23:52:49 on ttys000
AMIGA:barrywalker~> IFS="."
AMIGA:barrywalker~> num="192.168.21.8"
AMIGA:barrywalker~> arr=($num)
AMIGA:barrywalker~> x="${arr[2]}"
AMIGA:barrywalker~> y="${arr[3]}"
AMIGA:barrywalker~> echo "$x"
21
AMIGA:barrywalker~> echo "$y"
8
AMIGA:barrywalker~> _
var="192.168.21.8."
a=$(awk -F. '{print $3}' <<< "$var")
b=$(awk -F. '{print $4}' <<< "$var")
echo $a $b
21 8

Hi,
Just to show how to use a regex with creation of pseudo-index to get a field:

$ echo '192.168.21.8.' | sed 's/\([0-9]*\.\)\{0\}\([0-9]*\).*/\2/'
192
$ echo '192.168.21.8.' | sed 's/\([0-9]*\.\)\{1\}\([0-9]*\).*/\2/'
168
$ echo '192.168.21.8.' | sed 's/\([0-9]*\.\)\{2\}\([0-9]*\).*/\2/'
21
$ echo '192.168.21.8.' | sed 's/\([0-9]*\.\)\{3\}\([0-9]*\).*/\2/'
8

Regards.

var=192.168.21.8
IFS=. read _ _ a b << EOF
$var
EOF

or

var=192.168.21.8
b=${var##*.}
var=${var%*}
a=${var##*.}

bash or ksh93:

var=192.168.21.8
IFS=. read _ _ a b <<< "$var" 

--
@wisecracker, $IFS would need to be saved and restored afterwards

oldIFS=$IFS
....
IFS=$oldIFS
1 Like

Hi Scrutinizer...

I was aware of saving and restoring IFS as I use it in the AudioScope code but was merely showing how to extract the two variables in simple and understandable terms...

I will remember to do it longhand fully next time... ;o)

Since you are not interested in keeping the 2 first number you could also

IFS=. read a a a b << EOF

(would save the _ )