, как сопоставить все между строкой и перед следующим пробелом

Есть много причин, но основные из них:

  • лучший контроль над включением пробельных символов (что вы заметили)
  • частичная защита от неожиданного расширения оболочки, напр, символов glob * и ?
4
07.12.2016, 00:35
4 ответа

На данный момент ваш вопрос: «Как мне извлечь из строки '-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

3
27.01.2020, 20:52

С помощью 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
1
27.01.2020, 20:52

Предполагая, что 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
2
27.01.2020, 20:52

Забудьте 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])'
1
27.01.2020, 20:52

Теги

Похожие вопросы