Предполагая, что вы используете GNU tar
, вы можете сказать:
tar --transform 's/.*\///' -xzf archive.tgz
Это уберет все до последней косой черты из файла имена.
Просматривая Google, я нашел ссылку на другое сообщение unix.SE , в котором упоминается getent
- я не даже знаю, что эта программа существовала.
Вы можете использовать getent
, например dig
, чтобы преобразовать IP в имя хоста - и в моей системе по умолчанию было установлено getent
, но не dig
. Если вам нужны хосты ipv6, измените ahostsv4
на ahostsv6
.
getent ahostsv4 google.com | awk '{print $1}' | head -1
Я добавил этот ответ, потому что плохо разбираюсь в регулярных выражениях / sed и не смог бы найти ответ @heemayl.
ping
предназначен для проверки того, работает ли хост или нет, на основе ответа ICMP, это никогда не происходит. Правильный инструмент только для определения IP-адреса, для этого есть специальные инструменты.
Вы должны посмотреть dig
, host
, nslookup
- все, что вам больше подходит.
Вот результат dig
:
% dig +short google.com
123.108.243.57
123.108.243.51
123.108.243.54
123.108.243.48
123.108.243.60
123.108.243.52
123.108.243.56
123.108.243.55
123.108.243.61
123.108.243.58
123.108.243.49
123.108.243.50
123.108.243.59
123.108.243.47
123.108.243.53
В качестве примечания, в Linux, если вы хотите запросить NSSwitch (переключатель службы имен), т.е. / etc / nsswitch
, затем используйте команду getent
с базой данных hosts
(или ahosts
), например:
getent hosts google.com
На моем компьютере, у меня есть:
hosts: files mdns4 dns
в /etc/nsswitch.conf
, поэтому хосты getent
будут запрашивать последовательно и использовать gethostbyaddr (3)
или gethostbyname (3)
на основе имени и хостов
будет использовать getaddrinfo (3)
.
По сути, с моей конфигурацией сначала проверяется / etc / hosts
, затем mDNS и, наконец, DNS.
Если вы настаиваете на использовании ping
и sed
, вы можете сделать:
% ping -c1 google.com | sed -nE 's/^PING[^(]+\(([^)]+)\).*/\1/p'
123.108.243.56
Следует отметить, что, как вы видите в выходных данных @heemayl dig
, некоторые сайты могут иметь более одного IP-адреса. Скорее всего, вам понадобится поиск в DNS, чтобы получить их все, поскольку ping
будет использовать только первый полученный адрес. То же самое для всего, что в основном хочет подключиться, и не перечисляет конкретно адреса.
(Кроме того, в случае чего-то вроде Google вы получите разные IP-адреса в зависимости от того, где вы находитесь. Возможно, здесь нет проблем, но стоит отметить.)
Еще кое-что о команде ты использовал. Это: tr -d '(44): \ n'
удаляет все копии символов (
, 4
, )
, :
и \ n
из входа. tr
всегда смотрит только на отдельные символы, а не на строки. Посмотрев на полученный результат, вы увидите, что 4
пропал в середине IP-адреса. Для работы со строками воспользуйтесь другим инструментом, например sed
.
Чтобы показать разные цвета навес для велосипедов , вот еще один простой, с GNU grep:
$ ping google.com -c1 | head -1 | grep -Eo '[0-9.]{4,}'
172.217.22.174