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

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

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

 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 из переменной?

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. 

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

  • Как я запускаю сценарий n раз в одно и то же время и как имитировать семафор?
  • Ответ yes в сценарии bash
  • Используйте функцию автозаполнения терминала для ввода сценария оболочки
  • Как искать и извлекать строку из вывода команды?
  • Как перемещать строки в файле, который содержит * в каждой строке
  • Как разрезать текстовый файл на несколько файлов по 100 строк каждый?
  • хранить и выполнять команду redirection / piped в скрипте
  • Найти файлы, созданные за определенное время после или до создания определенного файла
  • crontab дает только 2045 строк вывода вместо 6000 строк
  • Разбор XML с использованием xmllint и настройка вывода
  • Существуют ли проблемы с дефисами в функциях, псевдонимах и исполняемых файлах?
  • Чтение цели символической ссылки и увеличение целевой
  • Interesting Posts

    Больше сценариев оболочки, чем один в одном текстовом файле?

    Как изменить стандартную (двоичную) версию python в тюрьме FreeBSD?

    Пользователи NIS не могут использовать yppasswd на клиентских компьютерах

    Разная раскладка клавиатуры для каждой клавиатуры

    Запустите программу dbus в crontab, как узнать о идентификаторе SESSION?

    Внешний экран распознан, но черный

    Лучший способ копирования полного / nix / хранения по сети с одной машины nixos на другой

    Поддерживает ли H110 материнскую плату и i3 -6100 режим VT-d / iommu?

    Выполнять команду или функцию, когда SIGINT или SIGTERM отправляются самому родительскому скрипту, а не дочерним процессам

    Устройство чтения SD-карт в Linux: протокол SPI или SD под

    Детский процесс продолжает работать, если родитель умирает

    Откройте Firefox дважды (с тем же профилем)

    Как создать новый файл и отредактировать его как root?

    iptables Port Forwarding – нет обслуживания с портом

    Апричность ОС не отображается в grub

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