использование sed / awk в переменных сценария bash

Прошло много времени с тех пор, как мне пришлось использовать sed или awk, так что медведь со мной. Я пытаюсь получить имя DNS-сервера 4.2.2.1 .

Использование host 4.2.2.1 Я получаю этот вывод:

  • Как проверить, определена ли функция в awk?
  • Переключение между двумя программами framebuffer
  • Замена нескольких звездочек в vi
  • Позиционные параметры вызывающего абонента функции
  • Удалите совпадающую строку и еще несколько из файла
  • Добавить строку суффикса в конец каждой строки?
  •  1.2.2.4.in-addr.arpa domain name pointer a.resolvers.level3.net 

    в моем сценарии я делаю это как:

     name="$($host $server)" 

    Как я могу использовать sed / awk в $name только для получения a.resolvers.level3.net , имея в виду, что я буду использовать это на совершенно разных серверах, поэтому я не могу просто grep a.resolvers из переменной?

  • Объединение двух файлов с уникальным идентификатором
  • выяснить удаленные IP-адреса всех компьютеров?
  • Как скопировать файл из удаленной сети на локальный рабочий стол
  • Как удалить элемент из списка?
  • Есть ли команда Unix для цитирования строк ввода?
  • mv перезаписывает файл только для чтения без запроса
  • 5 Solutions collect form web for “использование sed / awk в переменных сценария bash”

    Другой вариант – отрезать строку:

     echo ${name##* } 

    Это отрежет строку и сохранит часть, начиная с последнего места до конца.

     ${name <-- from name ## <-- trim the front * <-- matches anything ' ' <-- until the last ' ' } 

    Проще всего было бы использовать awk и сообщить ему, чтобы напечатать последнее поле:

     $ echo "$name" | awk '{print $NF}' a.resolvers.level3.net 

    Конечно, если все, что вам нужно, это IP-адрес сервера, вы можете также получить это name в первую очередь, поэтому вам не нужно его обрабатывать позже:

     name=$(host $server | awk '{print $NF}') 
     name=$(host "$server" | grep -o '[^[:space:]]*$') 

    выберет конечную часть вывода команды хоста.

    Просто sed альтернативу sed . Это будет печатать последний столбец из строки, разделенной пробелами.

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

    Я тестировал его для случаев, когда a.resolvers.level3.net – единственная строка в переменной $ name, и она работает.

     $ echo "$name" 1.2.2.4.in-addr.arpa domain name pointer a.resolvers.level3.net $ $ echo "$name"|sed 's/.*[[:space:]]\(.*\)$/\1/' a.resolvers.level3.net $ $ name="a.resolvers.level3.net" $ echo "$name"|sed 's/.*[[:space:]]\(.*\)$/\1/' a.resolvers.level3.net $ 

    Более короткий ответ, не связанный с строковой манипуляцией,

     dig +short -x 4.2.2.1 

    который отображает

     a.resolvers.level3.net. 

    и больше ничего. Конечно, вы должны установить коп.

    Linux и Unix - лучшая ОС в мире.