bash получить первое поле awk grep - PullRequest
0 голосов
/ 11 сентября 2018

В моей команде показа brctl:

bridge name bridge id       STP enabled interfaces
olm-com_uim     8000.b8ca3a5ecab1   no      eth1
                            vnet1


tyy-fom_psr     8000.a0369f11b218   no      bond1103
                            vnet0
                            vnet10
                            vnet8
uuu-r8s_udm     8000.b8o        eth1.1621
                            vnet5
bbb-r8s_ptr     8000.b8c    no      bond1115

Я просто хочу grep:

olm-com_uim
tyy-fom_psr
uuu-r8s_udm 
bbb-r8s_ptr

Поэтому я пытаюсь это сделать,

brctl show | grep -v vnet | grep -v bridge | awk '{print $1}'

Но я думаю,Это не очень хороший метод

Ответы [ 5 ]

0 голосов
/ 11 сентября 2018

много ответов. Вот седь:

brctl show | sed -e 1d -nre 's/^([^[:blank:]]+).*/\1/p'
0 голосов
/ 11 сентября 2018

brctl вывод из моего окна разработчика. Вы должны получить желаемый результат с помощью следующей команды.

$ brctl show | awk 'NF>1 && NR>1{print $1}'
br0
docker0
virbr0
virbr1
virbr2
virbr3

NF>1 необходим для фильтрации vnet интерфейсов, следующих за мостовыми интерфейсами.

0 голосов
/ 11 сентября 2018

другое awk

$ awk '!/^ / && NF{print $1}' file

olm-com_uim
tyy-fom_psr
uuu-r8s_udm
bbb-r8s_ptr

, если не начинается с пустой и не пустой строки, выведите первое поле.Если вы хотите пропустить заголовок, добавьте && NR>1

0 голосов
/ 11 сентября 2018
$ awk -F'\t' 'NR>1 && $1{print $1}' file
olm-com_uim
tyy-fom_psr
uuu-r8s_udm
bbb-r8s_ptr

или если ваши поля не были разделены табуляцией:

$ awk 'NR>1 && /^[^[:space:]]/{print $1}' file
olm-com_uim
tyy-fom_psr
uuu-r8s_udm
bbb-r8s_ptr
0 голосов
/ 11 сентября 2018

Это можно сделать также с помощью grep -o:

brctl show | tail -n +2 | grep -o '^[^[:blank:]]\+'

olm-com_uim
tyy-fom_psr
uuu-r8s_udm
bbb-r8s_ptr

Regex ^[^[:blank:]]\+ соответствует 1+ непробельным символам в начале строки.

...