【问题标题】:Filter a command's output by occurrences of a certain character?通过某个字符的出现来过滤命令的输出?
【发布时间】:2018-01-12 02:13:47
【问题描述】:

假设我有一个命令,例如ls。并且输出很大,我想通过字符':'的出现次数对其进行过滤。这些事件不需要是连续的,它们只需要发生。任何包含十个或更多此类事件的行都应发送到输出。有没有办法做到这一点?我正在考虑编写一个 python 脚本,并将其作为命令,例如this,但我不确定如何格式化脚本,以及在管道输出方面我能做什么和不能做什么上一个命令到这个新脚本/命令中。

【问题讨论】:

标签: python shell unix pipe find-occurrences


【解决方案1】:

shell 解决方案将涉及调用awk

ls | awk -F: 'NF<9'

这会从ls 读取标准输出并将其发送到管道,然后awk 根据: 将每一行拆分为字段。 NF 表示字段数。当NF 大于9 时,将打印记录。

你可以通过传入一个变量来扩展它以过滤任何数字

ls | awk -F: -v minCnt=10 'NF<=minCnt`

IHTH

【讨论】:

    【解决方案2】:

    使用扩展正则表达式:

    ls | egrep '(:.*){10,}'
    

    例如,来自man bash,显示所有带有15或更多“e”的行,然后用颜色突出显示它们:

    COLUMNS=80 man bash | egrep --color '(e.*){15,}' | grep --color e
    

    输出,(彩色部分为粗体):

    greater 大于 9 arerepresented by the lowercase letters, the uppercase

    【讨论】:

      【解决方案3】:

      您可以从标准输入读取、过滤和写入标准输出:

      # script.py
      import sys
      for line in sys.stdin:
          if line.count(':') >= 10:
              sys.stdout.write(line)
      

      呼叫:

      > ls | python script.py
      

      【讨论】:

      • 有没有办法做到这一点并过滤 airodump-ng?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多