У меня есть многострочная команда pcregrep, которую я хотел бы преобразовать в команду awk или sed, потому что мне это нужно на машине, где pcregrep недоступен (OS X).преобразовать команду pcregrep в awk или sed
Оригинал команда:
ifconfig -a | pcregrep -M '^[a-z].*\n(\t[^\n]+\n)+\t[^\n]+baseTX' | grep -oE "^([a-z]+[^:]+)"
Он выведет имя интерфейса, который содержит строку «BaseTX» (только метод, который я нашел, чтобы надежно узнать имя сетевого интерфейса на MacBook). В моем случае «en4».
вводимый текст выглядит следующим образом:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=1<PERFORMNUD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether xx:xx:xx:xx:xx:xx
inet6 xxxx::xxxx:xxxx:xxxx:xxx%en0 prefixlen 64 scopeid 0x4
inet 10.xxx.xxx.xx netmask 0xffffff00 broadcast 10.xxx.xxx.255
inet6 xxxx:xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx prefixlen 128
nd6 options=1<PERFORMNUD>
media: autoselect
status: active
en5: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
options=60<TSO4,TSO6>
ether xx:xx:xx:xx:xx:xx
media: autoselect <full-duplex>
status: inactive
en6: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
options=60<TSO4,TSO6>
ether xx:xx:xx:xx:xx:xx
media: autoselect <full-duplex>
status: inactive
en4: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=4<VLAN_MTU>
ether xx:xx:xx:xx:xx:xx
inet6 xxxx::xxxx:xxxx:xxxx:xxxx%en4 prefixlen 64 scopeid 0x7
inet XX.XXX.XXX.XX netmask 0xffffff00 broadcast XX.XXX.XXX.XXX
inet6 xxxx:xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx prefixlen 128
nd6 options=1<PERFORMNUD>
media: autoselect (100baseTX <full-duplex>)
status: active
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=63<RXCSUM,TXCSUM,TSO4,TSO6>
ether xx:xx:xx:xx:xx:xx
Configuration:
id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
ipfilter disabled flags 0x2
member: en5 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 5 priority 0 path cost 0
member: en6 flags=3<LEARNING,DISCOVER>
ifmaxaddr 0 port 6 priority 0 path cost 0
nd6 options=1<PERFORMNUD>
media: <unknown type>
status: inactive
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
ether xx:xx:xx:xx:xx:xx
media: autoselect
status: inactive
Как я могу грейферы «EN4» с AWK или СЭД? Я пробовал в течение часа, но я просто плохо разбираюсь в sed и awk.
У вас есть 'ip' команду? Что делает вывод 'ip addr show'? –
sed - это единственный инструмент для простых подстановок на одной линии. Как только вы начнете говорить о чем-либо, связанном с выбором или другим действием на нескольких строках, вы должны использовать awk. –
У меня нет команды ip. Спасибо за рекомендацию Эд, я буду помнить об этом. – KaZ