напечатать строку между скобками и несколькими строками на одной строке

Существует утилита с именем dhcpdump , она прослушивает сетевой интерфейс и сбрасывает DHCP-трафик, она также может фильтровать по аппаратному адресу (MAC).

Вы можете использовать это с комбинацией grep, чтобы вызвать ваше действие.

На ноутбуке я использовал его для контроля через Ethernet запроса на IP-адрес моего телефона (по Wi-Fi).

dhcpdump -i eth0 -h cc:05:1b:1d:8f:6d |tee dhcp3.log
cat dhcp3.log
TIME: 2015-10-17 14:21:25.079
    IP: 0.0.0.0 (cc:5:1b:1d:8f:6d) > 255.255.255.255 (ff:ff:ff:ff:ff:ff)
    OP: 1 (BOOTPREQUEST)
 HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 0
   XID: 00000000
  SECS: 65535
 FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 0.0.0.0
CHADDR: cc:05:1b:1d:8f:6d:00:00:00:00:00:00:00:00:00:00
 SNAME: .
 FNAME: .
OPTION:  53 (  1) DHCP message type         3 (DHCPREQUEST)
OPTION:  50 (  4) Request IP address        192.168.1.75
OPTION:  54 (  4) Server identifier         192.168.1.254
OPTION:  57 (  2) Maximum DHCP message size 1500
OPTION:  60 ( 13) Vendor class identifier   dhcpcd 4.0.15
OPTION:  55 (  9) Parameter Request List      1 (Subnet mask)
                                            121 (Classless Static Route)
                                             33 (Static route)
                                              3 (Routers)
                                              6 (DNS server)
                                             28 (Broadcast address)
                                             51 (IP address leasetime)
                                             58 (T1)
                                             59 (T2)

---------------------------------------------------------------------------

-121--174190-

Это очень глупая цепь перенаправления, которую вы там объединили. Я не понимаю, что вы действительно пытаетесь там сделать, но вы определенно неверно истолковали источник вашей проблемы. Может быть, это даст вам представление:

[mikeserv@desktop top]$ > >(sed 's/^/hey there:\t/') 2> >(ls -l /dev/fd/*)

ls: cannot access /dev/fd/10: No such file or directory
ls: cannot access /dev/fd/255: No such file or directory
ls: cannot access /dev/fd/3: No such file or directory
hey there:  lr-x------ 1 mikeserv mikeserv 64 Oct 17 06:38 /dev/fd/0 -> pipe:[10484689]
hey there:  l-wx------ 1 mikeserv mikeserv 64 Oct 17 06:38 /dev/fd/1 -> pipe:[10484688]
hey there:  lrwx------ 1 mikeserv mikeserv 64 Oct 17 06:38 /dev/fd/2 -> /dev/pts/3
hey there:  l-wx------ 1 mikeserv mikeserv 64 Oct 17 06:38 /dev/fd/63 -> pipe:[10484688]

Конечно, эхо не записывается в , пока цикл stdout - вы заменяете его в этой команде на любой канал command1 читает, когда вы делаете:

> >(command1) 2> >(command2)

Перенаправления обрабатываются по порядку - слева направо для каждой команды. Каждая из этих замен процесса влияет на одну и ту же команду .

Я готов поставить то, что вы на самом деле пытаетесь сделать гораздо ближе к:

command0 | command1 2>&1 >/dev/null | command2

-121--111292-

Согласно этому пост , Evernote 5,9 .x имеет проблемы с редактором. Вы можете скачать 5.8.x здесь .

-1
02.05.2018, 15:22
2 ответа

Если sedвас устраивает:

sed '/CLUSQMGR(/!d;s///;N;s/).*\n[^(]*(/ /;s/)$//'

Пояснение:

  • Основная идея :обе строки идут как пара, поэтому, если первая из пары найдена, читаем следующую и делаем некоторую замену, чтобы удалить все ненужное
  • /CLUSQMGR(/!dигнорирует все строки, не содержащие CLUSQMGR(, на тот случай, если могут быть другие строки, которые вам не нужны
  • s///удаляет последний паттерн, которым являетсяCLUSQMGR(
  • Nдобавляет следующую строку в пространство шаблонов со встроенным символом новой строки
  • s/).*\n[^(]*(/ /заменяет все от закрывающей скобки до первой открывающей скобки второй строки пробелом. Это делается путем привязки шаблона к символам новой строки(\n[^(]*, соответствующим любому количеству символов, кроме (
  • .
  • s/)$//удаляет завершающий)
1
28.01.2020, 05:10

Awkраствор:

awk 'function get_srv_data(sep) {    # get/extract server data
         gsub(/^[^(]+\(|\)$/, "", $1);
         printf $1 sep;
     }
     /^CLUSQMGR/{ get_srv_data(OFS) }
     /^CONNAME/ { get_srv_data(ORS) }' file

Выход:

server1 server1.opr.test.company.com(1414)
server2 server2.opr.test.company.com(1414)
0
28.01.2020, 05:10

Теги

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