繁体   English   中英

通过出现某个字符来过滤命令的输出?

[英]Filter a command's output by occurrences of a certain character?

假设我有一个命令,例如ls 而且输出很大,我想按字符“:”的出现次数对其进行过滤。 这些事件不必是连续的,它们只需要发生即可。 具有十个或更多这些事件的任何行都应发送到输出。 有没有办法做到这一点? 我想在做一个python脚本,并使其成为一个命令,像这样 ,但我不知道我怎么会格式化剧本,我能做和不能在管道输出方面,从以前的命令做到这个新的脚本/命令中。

Shell解决方案将涉及调用awk

ls | awk -F: 'NF<9'

这将从ls读取标准输出,并将其发送到管道,并且awk将每行拆分为多个字段: NF平均场数。 NF大于9 ,将打印记录。

您可以通过传入变量将其扩展为过滤任何数字

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

IHTH

使用扩展的正则表达式:

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

例如,在man bash ,显示所有包含15个或更多“ e ”的行,然后以彩色突出显示它们:

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

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

GRË在比由前作 低辐射 RCASËL E TTëRS,前作 UPPËRCASë9 ARËřËPR(E S)ÊNTËdËř

您可以从标准输入中读取,过滤并写入标准输出:

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

呼叫:

> ls | python script.py

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM