Мне нужно извлечь второй IP-адрес из traceroute так
traceroute -m2 8.8.8.8 |grep .net |awk '{print $3}'
(111.222.333.4444)
Независимо от того, что я пытаюсь, я не могу понять, как удалить окружающие скобки из вывода. [ ! d1]
Вы не нуждаетесь в grep между ними, используйте возможность сопоставления шаблонов AWK.
$ traceroute -m 2 8.8.8.8 | awk '/net/{gsub(/\(|\)/,"");print $3}'
207.225.112.2
/net/ соответствует строкам со словом net gsub( /\(|\)/ , "" ) соответствует ( или [ f7] и заменяет их пустой строкой (эффективно удаляя). print $3 печатает третий элемент, который все еще является IP-адресом, но без скобок Do:
traceroute -m2 8.8.8.8 | grep .net | awk '{print $3}' | sed -e "s/(//" -e "s/)//"
Нет любви к grep / sed?
grep с PCRE (-P):traceroute -m 2 8.8.8.8 | grep -Po '\.net[^(]+\(\K[^)]+(?=\))'
\.net[^(]+\( соответствует части до [ f8] и \K отбрасывает совпадение [^)]+, в котором находится желаемая часть внутри (), а положительный результат с нулевой шириной (?=\)) гарантирует, что за участком следует ) [d11 ] grep с помощью PCRE (-P): traceroute -m 2 8.8.8.8 | grep -Po '\.net[^(]+\(\K[^)]+(?=\))'
\.net[^(]+\( соответствует части до ( и \K отбрасывает совпадение [^)]+, вносит желаемую часть в () и положительную нулевую ширину lookahead (?=\)) гарантирует, что за участком следует ) Я просто использую tr -d для удаления набора символов, это проще. И awk также может grep сразу:
traceroute -m 2 8.8.8.8 | awk '/.net/{print $3}' | tr -d '()'
Если ваш awk разрешает разделители полей regexp, используйте единую команду:
awk -F'[()]' '/\.net/{print $2}'
Это разделяет входные слова на слова, разделенные символами ( или ), поэтому второе слово - это ip-адрес .
traceroute -m2 8.8.8.8 |grep .net |awk '{print $3}'|cut -f1 -d) -c2-
или
traceroute -m2 8.8.8.8 |grep .net |awk '{print $3}'|cut -f1 -d) -b2-
Первый для этого случая предпочтителен, поскольку мы работаем с символами, а не байтами, хотя второй может быть быстрее (a немного, конечно), поскольку он работает напрямую с байтами. Мы можем использовать оба, потому что ( - один байт.