簡體   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