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