簡體   English   中英

如何計算名稱中包含元音的文件數

[英]How to count the number of files whose name contains a vowel

我試圖編寫一個腳本,該腳本使用目錄中的元音來計算文件數。

如果我用

find $1 -type f | wc -l

我得到目錄$ 1中的文件數量,但是我不知道如何使用grep來僅計算一個元音,我正在嘗試類似的操作

find $1 -type f | grep -l '[a,e,i,o,u,A,E,I,O,U]' | wc -l

您可以使用以下gnu find命令來計算至少帶有一個元音的所有文件:

find . -maxdepth 1 -type f -iname '*[aeiou]*' -printf ".\n" | wc -l

-iname '*[aeiou]*'全局模式將僅與文件名匹配至少一個a,e,i,o,u (忽略大小寫)。

如果還要遞歸計數子目錄中的文件,請刪除-maxdepth 1

如果您可以接受目錄計數:

ls -d *a* *e* *i* *o* *u* *y* *A* *E* *I* *O* *U* *Y* | wc -l

除此以外:

find $1 -type f | grep -i '[aeiouy]' | wc -l

您的嘗試失敗有兩個原因。 首先,如果grep在管道中讀取,則-l沒有意義,因為-l的目的是僅打印匹配的輸入文件,但在這種情況下,唯一的輸入文件是stdin。 其次,您的語法錯誤。 嘗試:

... | grep -i '[aeiou]' | ...

請不要在字符組表達式中使用逗號( []括號中的內容)

最好的方法是先執行find(1)來獲取要掃描的文件。 然后,您需要基本名稱,因為路徑信息無效。 最后,您需要使用[aeiouAEIOU]進行grep,以僅獲得帶有元音的行,最后使用wc(1)來計數行。

find ${DIRECTORY} -type f -print | sed -e 's@^.*/@@' | grep '[aeiouAEIOU]' | wc -l

-type f允許您僅選擇文件(而非目錄)。 sed(1)命令逐行編輯輸出,從名稱的第一部分開始直到最后一個/字符。 grep用至少一個元音過濾名稱,然后丟棄其他元音,最后wc -l計數行數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM