【问题标题】:grep/sed/awk out everything before a certain linegrep/sed/awk 清除某行之前的所有内容
【发布时间】:2012-01-10 21:32:19
【问题描述】:

我的命令有以下原始输出

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

但是,我只想要“当前网络信息:”之后的信息。计算之前的行数不起作用,因为该信息是可变的。另外,英镑符号是我放的。请忽略它们

【问题讨论】:

    标签: shell unix sed awk grep


    【解决方案1】:

    使用awk:

    awk '/Current Network Information/,0' INPUT_FILE
    

    使用sed:

    sed -n '/Current Network Information/,$p' INPUT_FILE
    

    【讨论】:

    • +1:有趣。我不知道 'awk' 可以处理这样的范围,但是 POSIX awk 可以,GNU 'awk' 也可以。我认为它可能是一个 GNU 扩展。一个人生活和学习; SO万岁。
    • 谢谢乔恩,我支持long live SO :-)
    • 非常感谢。你在哪里找到 awk 的范围的东西。我在手册页上找不到它
    • 这只是一个常规范围/StartRegex/,/EndRegex/。唯一的区别是我们的EndRegex0,这意味着false。所以这一行将匹配我们的/StartRegex/ 并继续到文件的末尾,因为0 总是falseEndRegex 永远不会匹配。 :-)
    • 我明白了。非常感谢你解释它。只是出于好奇,你会怎么做。当您到达当前网络信息时,从开头和结尾开始。
    【解决方案2】:
    yourcommand | sed -e '1,/Current Network Information/d'
    

    1,/Current Network Information/ 是 sed d 命令的地址说明符

    【讨论】:

      【解决方案3】:

      这可能对你有用:

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

      【讨论】:

        【解决方案4】:

        另一种 awk 方法:

        awk '/Current Network Information:/ { shouldPrint = 1 } shouldPrint'
        

        【讨论】:

          猜你喜欢
          • 2013-10-03
          • 2011-06-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-07
          • 2020-08-24
          • 1970-01-01
          • 2018-08-25
          相关资源
          最近更新 更多