Есть много причин, но основные из них:
*
и ?
На данный момент ваш вопрос: «Как мне извлечь из строки '-ip' в следующее пространство? ". На это отвечают следующие команды.
sed -e 's /^.*- ip \ ([^] * \). * $ / \ 1 /'
По сути, он говорит «любое количество символов без пробелов»: [^] *
$ echo "sdf sfdi -ip 192.168.1.1 sdf eret" | sed -e 's /^.*- ip \ ([^] * \). * $ / \ 1 /'
192.168.1.1
С помощью GNU grep:
echo 'sdffsd sfdfi -ip 192.168.1.1 sdfdf ertret' | grep -oE "([0-9]{1,3}[\.]){3}[0-9]{1,3}"
Вывод:
192.168.1.1
Предполагая, что GNU grep
:
$ echo 'sdffsd sfdfi -ip 192.168.1.1 sdfdf ertret' | grep -oE '[0-9.]+'
192.168.1.1
И чтобы ограничить это только действительными IP-адресами, то есть строки с 4 наборами цифр, разделенных .
и где ни один из них не превышает 255 (я не имею дело с <0
, поскольку -
не будут совпадать в первую очередь):
$ echo 'sdffsd sfdfi -ip 192.168.1.1 sdfdf ertret' | grep -oE '[0-9.]+' |
awk -F. '{for(i=1;i<=NF;i++){if(NF!=4||$i>255){next}}}1;'
192.168.1.1
Забудьте sed
. Вот как вы извлекаете вероятные IP-адреса (v4):
egrep -o '\b([0-9][0-9]?[0-9]?\.){3}[0-9][0-9]?[0-9]?\b'
Чтобы получить абсолютно только действительные IP-адреса (т. Е. Без чисел выше 255), перенаправьте указанную выше команду в:
egrep -v '([3-9][0-9][0-9]|2[6-9][0-9]|25[6-9])'