Существует утилита с именем 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 здесь .
Если sed
вас устраивает:
sed '/CLUSQMGR(/!d;s///;N;s/).*\n[^(]*(/ /;s/)$//'
Пояснение:
/CLUSQMGR(/!d
игнорирует все строки, не содержащие CLUSQMGR(
, на тот случай, если могут быть другие строки, которые вам не нужны s///
удаляет последний паттерн, которым являетсяCLUSQMGR(
N
добавляет следующую строку в пространство шаблонов со встроенным символом новой строки s/).*\n[^(]*(/ /
заменяет все от закрывающей скобки до первой открывающей скобки второй строки пробелом. Это делается путем привязки шаблона к символам новой строки(\n
)и [^(]*
, соответствующим любому количеству символов, кроме (
s/)$//
удаляет завершающий)
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)