как извлечь только IP-адрес из запроса DNS

] Прежде всего, вот образец дерева, который я создал:

{   pwd
    for   d in ./*/
    do    cd "$d"
          printf '\t%s\n' "${d#??}"
          printf '\t\t%s\n' *
          cd ..
    done
}

/tmp/top
        another file/
                another file.pdf
        fileA/
                fileA.pdf
        otherdir/
                1
                2
                3
        stillanother4544file/
                stillanother4544file.pdf

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

Но вот что я рекомендую вам сделать:

pax -rwis'|^./\([^/]*\)/\(\1\....\)$|\2|' -s'|.*||' . ../tgt

Это вызывает стандартную POSIX утилиту pax в -r ead / -w rite mode - режим прямого копирования, в основном. В режиме копирования pax не создает архив tar , как обычно в режиме -w rite, а вместо этого напрямую копирует все файлы, найденные в его ] [... шаблон ...] аргумент [s] - здесь только . для дерева с корнем в текущем каталоге - и / или имена, которые оно читает на своем стандартном вводе (в данном случае пусто) - в каталог, названный его последним аргументом, который находится здесь ../ tgt .

Я знаю, что вы не хотите перемещать все дерево. Многое из этого решается с помощью аргументов -s ubstitution. Вы можете переименовывать выходные файлы на основе операторов в стиле регулярного выражения sed , как это делаю я здесь. Я использую два оператора -s ubstitution. Первый переименовывает все входные совпадения для:

./dirname/samename.???

... в ...

samename.???

... на выходе, тем самым сглаживая выходное дерево, чтобы все скопированные файлы помещались непосредственно в ../ tgt . Если вы предпочитаете оставить ./ dirname / родительские каталоги для каждого из них вы можете заменить часть \ 2 первого -s ubstitution только на и .

После того, как имя файла было успешно сопоставлено и изменено с помощью pax -s ubstitution, оно не будет повторяться ни для каких оставшихся аргументов -s ubstitution, и только для этих файлов которые еще не могут соответствовать, пробуются для оставшихся регулярных выражений переименования. Это означает, что все файлы, расположенные в текущем каталоге с именами пути, соответствующими типу:

./dirname/samename.???

... успешно выбраны и удаляются из всех компонентов, кроме последних, с помощью первого оператора -s ubstitution и всех другие файлы, расположенные в текущем каталоге, полностью заменяются второй заменой -s |. * || -s . Это потому, что pax удаляет из своего списка обработки любое имя файла, заменяющее пустую строку.

После того, как pax обработал все это, у него есть последняя обязанность, которую нужно выполнить, прежде чем он сможет фактически скопировать выбранные файлы - и это вариант интерактивного переименования -i , который я указано, и я думаю, что это, вероятно, прямо в вашем переулке.

Из man pax :

-i

  • Интерактивное переименование файлов или членов архива. Для каждого элемента архива, соответствующего операнду шаблона , или каждого файла, соответствующего файловому операнду, pax предложит / dev / tty указать имя файла, его файловый режим и время его модификации. pax затем прочитает строку из / dev / tty . Если эта строка пуста, элемент файла или архива пропускается. Если эта строка состоит из одной точки, файл или элемент архива обрабатывается без изменения его имени. В противном случае его имя заменяется содержимым строки. pax немедленно завершит работу с ненулевым статусом выхода, если EOF обнаружен при чтении ответа или если / dev / tty не может быть открыт для чтения и записи .

ATTENTION: pax interactive file rename operation.
-rw-r--r-- Oct 17 04:30 stillanother4544file.pdf
Input new name, or a "." to keep the old name, or a "return" to skip this file.
Input > .
Processing continues, name unchanged.

ATTENTION: pax interactive file rename operation.
-rw-r--r-- Oct 17 04:30 another file.pdf
Input new name, or a "." to keep the old name, or a "return" to skip this file.
Input >
Skipping file.

ATTENTION: pax interactive file rename operation.
-rw-r--r-- Oct 17 04:30 fileA.pdf
Input new name, or a "." to keep the old name, or a "return" to skip this file.
Input > .
Processing continues, name unchanged.

Таким образом, из шести файлов в текущем каталоге только эти три попадают в запросы интерактивного переименования -i , а из этих трех только два попадают в ../ tgt :

ls -l ../tgt

-rw-r--r-- 1 mikeserv mikeserv 0 Oct 17 04:30 fileA.pdf
-rw-r--r-- 1 mikeserv mikeserv 0 Oct 17 04:30 stillanother4544file.pdf
3
26.02.2018, 16:14
2 ответа

La respuesta de @dhag suena bien; si no desea "confiar en que la última línea de la salida de excavación es la IP", puede usar greppara extraer solo la dirección IP numérica:

dig +short smtp.mydomain.net | grep '^[.0-9]*$'
5
27.01.2020, 21:09

Я полагаю, что dig +shortвыводит для вас две строки, потому что домен вы запрашиваете, smtp.mydomain.netявляется CNAME для smtp.ggs.mydomain.net, и dig печатает шаг промежуточного разрешения.

Вероятно, вы можете полагаться на то, что последняя строка вывода dig является IP-адресом. вы хотите, однако, и поэтому следует сделать следующее:

dig +short smtp.mydomain.net | tail -n1
18
27.01.2020, 21:09

Теги

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