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

скажем, у меня есть следующая строка:

sdffsd sfdfi -ip 192.168.1.1 sdfdf ertret 

Я хотел бы извлечь «192.168.1.1» или любой другой действительный ip-адрес (четыре десятичных числа, каждый из которых варьируется от 0 до 255, разделенных точками, например 172.16.254.1)

Кажется, что самый простой способ сделать это – совместить все между строкой «-ip» и перед следующим следующим пространством (пробел между 192.168.1.1 и sdfdf).

Я пытался:

 sed -e 's/-s \(.*\)[[:space:]]/\1/' 

но это не сработало

4 Solutions collect form web for “как совместить все между строкой и перед следующим пространством”

На данный момент ваш вопрос: «Как извлечь из строки« -ip »в следующее пространство?». Ниже приведены ответы команд.

sed -e 's/^.*-ip \([^ ]*\) .*$/\1/'

Он работает, по существу говоря «любое количество непространственных символов»: [^ ]*

$ echo "sdf sfdi -ip 192.168.1.1 sdf eret" | 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.]+' 192.168.1.1 

И ограничить это только действительными IP-адресами, поэтому строки с четырьмя наборами цифр разделены . и где ни один из них не превышает 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 

С 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

Забудьте 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])' 
  • Извлеките значения из имени файла и добавьте его в текстовый файл
  • Принудительные начальные нули в эхо базовой конверсии
  • Извлечь адрес Mac из вывода
  • Регулярные выражения для дезинфекции телефонных номеров
  • Замена конца слова чем-то еще
  • Извлечь определенный текст из переменной в сценарии оболочки
  • Объединение трех последовательных строк с заменой
  • Удалить ведущее 0 из определенного поля
  • удалить строки, содержащие определенный текст в файле
  • Заменяйте символы по определенному индексу, отсчитываемому сзади
  • Удаление символов в определенном столбце перед определенным символом
  • Linux и Unix - лучшая ОС в мире.