Как я могу изменить эту команду sed, чтобы удалить конечное двоеточие на выходе

Мне нужно показать интерфейсы 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? или другие идеи

0
10.08.2016, 21:47
2 ответа

Это будет работать в старых системах без двоеточия и в новых системах с двоеточием:

$ /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.

Как работает команда awk

  • -F '[:] +'

    Это указывает awk обрабатывать любые последовательные пробелы или двоеточия как разделители полей.

  • $ 1 && $ 1! = "Lo" {print $ 1}

    Если есть первое поле, и если это поле не lo , то распечатайте его.

Как работает команда sed

  • -n

    Указывает sed не печатать ничего, если этого не попросят явным образом.

  • s / [:]. * //

    Это говорит sed удалить все от первого пробела или двоеточия до конца строки.

  • / ^ lo $ / t

    Если строка соответствует lo , то пропустите остальные команды и начните заново со следующей строки.

  • /./ p

    Если строка вообще содержит какие-либо символы, вывести строку.

0
28.01.2020, 04:50

К сожалению, вы не предоставляете необработанный вывод команды 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' в начале строки '^'.

0
28.01.2020, 04:50

Теги

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