Мне нужно показать интерфейсы Ethernet на сервере Centos 7. В centos 6.5 я использовал эту команду (из другого сообщения), и она отлично работает на 6.5.
ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p' | grep -Fvx -e lo
на Centos 7 вывод интерфейса теперь имеет завершающий ":"
, поэтому мой вывод выглядит так
ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p' | grep -Fvx -e lo
ens32:
lo:
, чтобы удалить "lo:", я изменил его. что приводит к Ens32:
ifconfig -a | sed -n 's/^\([^ ]\+\).*/\1/p' | grep -Fvx -e lo:
ens32:
Как я могу удалить завершающий ":"? можно ли изменить этот sed? или другие идеи
Это будет работать в старых системах без двоеточия и в новых системах с двоеточием:
$ /sbin/ifconfig -a | awk -F'[ :]+' '$1 && $1!="lo" {print $1}'
eth0
В качестве альтернативы, при использовании sed это также будет работать как в новых, так и в старых системах:
$ /sbin/ifconfig -a | sed -n 's/[ :].*//; /^lo$/t; /./p'
eth0
При использовании awk или sed он редко требуется дополнительный процесс для запуска grep.
-F '[:] +'
Это указывает awk обрабатывать любые последовательные пробелы или двоеточия как разделители полей.
$ 1 && $ 1! = "Lo" {print $ 1}
Если есть первое поле, и если это поле не lo
, то распечатайте его.
-n
Указывает sed не печатать ничего, если этого не попросят явным образом.
s / [:]. * //
Это говорит sed удалить все от первого пробела или двоеточия до конца строки.
/ ^ lo $ / t
Если строка соответствует lo
, то пропустите остальные команды и начните заново со следующей строки.
/./ p
Если строка вообще содержит какие-либо символы, вывести строку.
К сожалению, вы не предоставляете необработанный вывод команды ifconfig.Но я бы пошел примерно так:
$ ifconfig -a | perl -anle 'print $F[0] if /(^\w)/'
$ enp2s0f0
lo
tun0
wlp3s0b1
Исходный вывод выглядит следующим образом:
enp2s0f0 Link encap:Ethernet HWaddr 3c:07:54:5f:5e:35
inet addr:192.168.1.114 Bcast:192.168.1.255
[...]
perl -anle, где 'a' разбивает строку в столбце и заполняет переменную $ F 'n' равно для обработки вывода построчно, «l» означает вставку новой строки между каждым выводом, а «e» - выполнение команды perl в командной строке. Затем следуйте регулярному выражению, где я просто говорю, что хочу сопоставить строку '//', содержащую один символ '\ w' в начале строки '^'.