Regex awk для интерфейса Cisco

Я хотел бы знать, есть ли какое-нибудь Sed / Grep или Awk regex для разделения раздела интерфейса Cisco с определенным атрибутом, например, ниже.

Содержимое файла file.txt

! interface FastEthernet0/1 no ip unreachables ! interface FastEthernet0/2 no ip proxy-arp ! 

Автор сценария:

 #!/bin/bash VALUE="no ip proxy-arp" awk -v RS='!\n' -v PATTERN=${VALUE} '/$PATTERN/' file.txt | awk '/^interface/'; exit 0 

Проблема в том, что я запускаю строку непосредственно из оболочки, она работает, но когда я запускаю сценарий, это не работает.

Запуск с bash -x , я вижу, что awk не может заменить значение переменной.

Какие-либо предложения ?

  • Установка Packet Tracer на устройства ARM
  • Cisco AnyConnect для Fedora
  • Доступ к VPN из Ubuntu 12.04
  • Трафик не маршрутизируется через Cisco VPN
  • Целое число после имени пользователя в клиенте OpenSSH, разделенное двоеточием
  • почему cisco VPNC работает во второй раз каждый раз, а не в первый раз
  • Regex to Cisco Interface
  • Изменение маршрутов для VPN
  • One Solution collect form web for “Regex awk для интерфейса Cisco”

    Трудно поверить, что это работает в вашей оболочке. Тем не менее этот код содержит несколько ошибок, а также неправильный подход IMHO.

    awk ожидает строку между // не переменной. Это постоянные регулярные выражения. Таким образом, вы либо заставляете оболочку помещать переменную туда, либо используете ~ .

    Ваш подход с исправлениями:

     awk -v RS='!\n' -v PATTERN="${VALUE}" '$0 ~ PATTERN' file.txt | awk '/^interface/' 

    Я удивлен, что это работает. Из документации я ожидал, что из-за установки RS нежелательный «!» будут напечатаны. Однако я считаю это лучше:

     awk -v PATTERN="${VALUE}" \ '$0 ~ PATTERN { print previousline; }; { previousline=$0; }' file.txt 

    или с жестко закодированным рисунком

     awk '/no ip proxy-arp/ { print previousline; }; { previousline=$0; }' file.txt 

    или с оболочкой, пишущей шаблон

     awk /"$VALUE"/' { print previousline; }; { previousline=$0; }' file.txt 
    Linux и Unix - лучшая ОС в мире.