Хобрук: Ваш путь к мастерству в программировании

grep/sed/awk вывести все до определенной строки

Моя команда имеет следующий необработанный вывод

Wi-Fi:

      Software Versions:
          CoreWLAN: 2.1.1 (211.3)
          CoreWLANKit: 1.0.1 (101.1)
          Menu Extra: 7.0.1 (701.2)
          configd plug-in: 7.1.1 (711.1)
          System Profiler: 7.0 (700.3)
          IO80211 Family: 4.1.1 (411.1)
          WiFi Diagnostics: 1.0.1 (101.1)
          AirPort Utility: 5.5.3 (553.20)
      Interfaces:
        en1:
          Card Type: AirPort Extreme  (0x14E4, 0xD6)
          Firmware Version: Broadcom BCM43xx 1.0 (5.100.98.75.18)
          MAC Address: xx:xx:xx:xx:xx:xx
          Locale: FCC
          Country Code: US
          Supported PHY Modes: 802.11 a/b/g/n
          Supported Channels: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165
          Wake On Wireless: Supported
          AirDrop: Supported
          Status: Connected
         **Current Network Information:**
            PEETS:
              PHY Mode: 802.11g
              BSSID: 00:17:c5:0c:85:50
              Channel: 6
              Country Code: US
              Network Type: Infrastructure
              Security: None
              Signal / Noise: -52 dBm / -89 dBm
              Transmit Rate: 54
          Other Local Wi-Fi Networks:
            hpsetup:
              PHY Mode: 802.11b
              BSSID: ba:78:b7:86:78:69
              Channel: 6
              Network Type: Computer-to-Computer
              Security: None
              Signal / Noise: -90 dBm / -92 dBm
            yogurtland:
              PHY Mode: 802.11g
              BSSID: 0c:d5:02:7b:ce:5b
              Channel: 11
              Network Type: Infrastructure
              Security: WEP
              Signal / Noise: -72 dBm / -92 dBm

Однако мне нужна информация только после «Текущая информация о сети:». Подсчет строк до этого не работает, поскольку эта информация является переменной. Кроме того, знаки фунта были поставлены мной. Пожалуйста, игнорируйте их

10.01.2012

Ответы:


1

Использование awk:

awk '/Current Network Information/,0' INPUT_FILE

Использование sed:

sed -n '/Current Network Information/,$p' INPUT_FILE
10.01.2012
  • +1: Интересно. Я не знал, что 'awk' обрабатывает такие диапазоны, но POSIX awk, как и GNU 'awk'. Я думал, что это может быть расширение GNU. Человек живет и учится; да здравствует ТАК. 11.01.2012
  • Спасибо Джон, я второй, что long live SO :-) 11.01.2012
  • Большое спасибо. Где вы нашли диапазон для awk. Я не мог найти его на странице руководства 12.01.2012
  • Это обычный диапазон /StartRegex/,/EndRegex/. Единственная разница в том, что наш EndRegex — это 0, что означает false. Таким образом, эта однострочная строка будет соответствовать нашему /StartRegex/ и продолжится до конца файла, потому что 0 всегда соответствует false, а EndRegex никогда не совпадает. :-) 12.01.2012
  • Я понимаю. Большое спасибо за объяснение. Просто из любопытства, как бы вы сделали это по-другому. начать в начале и закончить, когда вы получите текущую информацию о сети. 12.01.2012
  • Хм… по-другому мы можем сделать что-то вроде этого awk 'NR==1,/Current Network Information/' filename, хотя я не проверял это. Это означает соответствие line number 1 и начало печати, пока не появится EndRegex. 12.01.2012

  • 2
    yourcommand | sed -e '1,/Current Network Information/d'
    

    1,/Current Network Information/ — это указатель адреса для команды sed d.

    10.01.2012

    3

    Это может сработать для вас:

    sed '/Current Network Information:/,$!d' file
    
    10.01.2012

    4

    Другой awk-подход:

    awk '/Current Network Information:/ { shouldPrint = 1 } shouldPrint'
    
    11.01.2012
    Новые материалы

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

    Что в лицо
    Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

    Почему шаблоны проектирования и почему нет?
    Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..

    Создание дизайна обуви с помощью машинного обучения
    Обувь. Что подождать? Я думал, что речь пойдет о машинном обучении! Ну это так. Если бы вы пошли на Amazon, сколько обуви вы бы нашли? Наверное, много, не так ли? Но много ли в них..

    GraalVM в 2022 году: итоги года
    2022 год был очень продуктивным для проекта и сообщества GraalVM. Вместе мы разработали множество новых функций, выпустили GraalVM для последних версий Java и новых платформ и увидели несколько..