Использование Awk для печати нужных строк nslookup

Если вы запустите bash как:

LD_DEBUG=bindings bash

в системе GNU и grep для bash. * Tinfo в этом выводе вы увидите что-то вроде:

   797:     binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `UP'
   797:     binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `PC'
   797:     binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `BC'
   797:     binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `tgetent'
   797:     binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `tgetstr'
   797:     binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `tgetflag'

Вы можете подтвердить из вывода nm -D / bin / bash , что bash использует эти символы из тинфо.

Открытие страницы руководства для любого из этих символов проясняет, для чего они нужны:

$ man tgetent
NAME
   PC, UP, BC, ospeed, tgetent, tgetflag, tgetnum, tgetstr, tgoto, tputs -
   direct curses interface to the terminfo capability database

В основном, bash , более вероятно, его readline (libreadline статически связана) редактор , использует их для запроса базы данных terminfo, чтобы узнать о возможностях терминала, чтобы он мог правильно запускать свой строковый редактор (отправляя правильные escape-последовательности и правильно распознавая нажатия клавиш) на любом терминале.

Что касается того, почему строка чтения статически связана с bash , вы должны иметь в виду, что строка чтения разрабатывается вместе с bash одним и тем же человеком и включена в источнике bash .

Можно собрать bash для связывания с установленной системой libreadline , но только если эта версия совместима, а это не по умолчанию. Вам нужно вызвать сценарий configure во время компиляции с - with-installed-readline .

0
31.05.2018, 21:58
3 ответа
nslookup EXAMPLE.example.com \
| awk '/^Name:/ {N=$2}; /^Address:/ {A=$2}; END {print N,A}'

Imprimirá solo el apellido y la dirección, pero si los quiere todos:

nslookup EXAMPLE.example.com \
| awk '/^Name:/ {N=$2}; /^Address:/ {print N,$2}'
1
28.01.2020, 02:31

Usar digen lugar de:

$ dig +noall +answer example.com | awk '{ print $1, $NF }'
example.com. 93.184.216.34

$ dig +noall +answer www.google.com | awk '{ print $1, $NF }'
www.google.com. 172.217.20.36

El script awkimprime el primer y último espacio en blanco -campos delimitados de la salida del comando dig(la salida sin formato también contiene algunas otras columnas en -entre estos ).


Su comando:

nslookup EXAMPLE.example.com | awk 'FNR ==4 {print$2}' | awk 'FNR ==5 {print$2}'

Esto no funciona ya que el segundo programa awkintenta obtener la quinta línea de la salida del primer programa awk, que solo genera una sola línea.

Algo así podría haber funcionado,

$ nslookup example.com | awk 'FNR == 4 || FNR == 5 { print $2 }'
answer:
example.com

pero en mi sistema, como puede ver, los datos buscados están en otras líneas (no en las líneas 4 y 5 ). Esto puede funcionar mejor para usted.

1
28.01.2020, 02:31
nslookup -type=A cdnjs.cloudflare.com | awk '/^Name:/ {c=2;N=$2} !--c {print N,$2}'

который распечатает все записи:

cdnjs.cloudflare.com 104.16.18.94
cdnjs.cloudflare.com 104.16.19.94

В отличие от других решений, этот сценарий будет соответствовать только фактическому ответу, а не адресу DNS-сервера. В случае неудачи он ничего не выведет.

Это было навеяно ответом на этот вопрос .

0
09.12.2020, 16:53

Теги

Похожие вопросы