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

Используйте это:

yum repolist all --color=never > repolist.txt

Независимо от этого, на самом деле вы получаете только три, а не четыре колонки вывода. Счетчик установок является частью столбца состояния. Полученный файл выглядит так:

Loaded plugins: fastestmirror, presto
Determining fastest mirrors
 * base: centos-distro.cavecreek.net
 * epel: mirror.oss.ou.edu
 * extras: mirror.scalabledns.com
 * ius: mirrors.kernel.org
 * rpmforge: mirror.hmc.edu
 * rpmforge-extras: mirror.hmc.edu
 * updates: mirror.n5tech.com
repo id                repo name                                 status
C6.0-base              CentOS-6.0 - Base                         disabled
C6.0-centosplus        CentOS-6.0 - CentOSPlus                   disabled
C6.0-contrib           CentOS-6.0 - Contrib                      disabled
C6.0-extras            CentOS-6.0 - Extras                       disabled
[etc]
base                   CentOS-6 - Base                           enabled:  6,575
base-debuginfo         CentOS-6 - Debuginfo                      disabled
c6-media               CentOS-6 - Media                          disabled
centosplus             CentOS-6 - Plus                           disabled
contrib                CentOS-6 - Contrib                        disabled
*epel                  Extra Packages for Enterprise Linux 6 - x enabled: 12,247
[etc]
3
13.01.2019, 23:17
5 ответов

Только поставив альтернативу 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
$
3
27.01.2020, 21:07

Еще один вариант — разрезать строку:

echo ${name##* }

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

${name <-- from name  
  ##   <-- trim the front  
  *    <-- matches anything  
  ' '  <-- until the last ' '  
 }  
11
27.01.2020, 21:07

Гораздо более короткий ответ, не включающий никаких операций со строками, — это

dig +short -x 4.2.2.1

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

a.resolvers.level3.net.

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

3
27.01.2020, 21:07

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

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

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

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

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

3
27.01.2020, 21:07

Теги

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