[英]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.