Я только начинаю использовать его sed
и собираюсь использовать для извлечения IP-адресов из ping
выходных данных. Вот чего я пытаюсь добиться:
введите текст:
ytmti (192.188.2.3) jjggy
желаемый результат:
192.188.2.3
Команда, которую я пробую:
echo "ytmti (192.188.2.3) jjggy" | sed 's:\((\(192.188.2.3\))\):\2:'
выходной ток:
ytmti 192.188.2.3 jjggy
Примечание: ytmti
и jjggy
на самом деле являются заменителями текста типа Pinging unix.stackexchange.com
и with 32 bytes of data:
.
Я думаю, что использование awk
может быть лучшим решением для анализа ping
выходных данных, но мне хотелось бы привыкнуть к sed
.
решение1
Команда подстановки sed
заменяет все символы, совпадающие в первом разделе, на все символы второго раздела, поэтому вам понадобится .*
или подобная и сгруппируйте только ту часть, которую нужно сохранить, например:
echo " ytmti (192.188.2.3) jjggy" | sed 's:^.*(\([^)]*\).*$:\1:'
Обратите внимание, что я использую [^)]*
это, избегая жесткого кодирования IP и обобщения его для любого из них. Это дает:
192.188.2.3
решение2
Использование переменной-разделителя полей в awk
:
echo "ytmti (192.188.2.3) jjggy" | awk -F'[)(]' '{print $2}'
192.188.2.3
решение3
Вы также можете сделать:
echo 'ytmti (192.188.2.3) jjggy' | tr -dc '0-9.'