我想列出名稱中只包含大寫字母的目錄中的所有條目。目錄需要附加「/」。使用grep列出目錄中的一個目錄
#!/bin/bash
cd ~/testfiles/
ls | grep -r *.*
由於grep的默認查找大寫字母只(右?),我只是通過遞歸目錄搜索下testfiles對於誰只包含大寫字母的所有名稱。
不幸的是,這是行不通的。
至於追加目錄,我不知道爲什麼我需要這樣做。有沒有人知道我可以從哪裏開始詳細解釋我可以用grep做什麼?此外如何解決我的問題?
我想列出名稱中只包含大寫字母的目錄中的所有條目。目錄需要附加「/」。使用grep列出目錄中的一個目錄
#!/bin/bash
cd ~/testfiles/
ls | grep -r *.*
由於grep的默認查找大寫字母只(右?),我只是通過遞歸目錄搜索下testfiles對於誰只包含大寫字母的所有名稱。
不幸的是,這是行不通的。
至於追加目錄,我不知道爲什麼我需要這樣做。有沒有人知道我可以從哪裏開始詳細解釋我可以用grep做什麼?此外如何解決我的問題?
不,grep的並不只考慮大寫字母。
你的問題我有點不清楚,例如:
ls -1
)。天真的解決辦法是:
ls -1 | grep "^[[:upper:]]\+$"
也就是說,打印只包含大寫字母的所有行。在這種打印,例如我的TEMP目錄:
ALLBIG
LCFEM
WPDNSE
然而,這將排除像README.TXT
或FILE001
文件,這取決於你的要求(見上文)應該最有可能被包括在內。
因此,更好的解決方案將是:
ls -1 | grep -v "[[:lower:]]\+"
即,打印不含有小寫字母的所有行。在打印例如我的TEMP目錄:
ALLBIG
ALLBIG-01.TXT
ALLBIG005.TXT
CRX_75DAF8CB7768
LCFEM
WPDNSE
~DFA0214428CD719AF6.TMP
最後,爲了「正確標註」後面有個「/」,你可以使用-F
(或--classify
)選項目錄。
ls -1F | grep -v "[[:lower:]]\+"
再次,例如輸出:
ALLBIG
ALLBIG-01.TXT
ALLBIG005.TXT
CRX_75DAF8CB7768
LCFEM/
WPDNSE/
~DFA0214428CD719AF6.TMP
注不同的選擇將是使用find
,如果你可以用不同的輸出(例如find ! -regex ".*[a-z].*"
)居住,但將有一個不同的輸出。
嗨Christain.K - 我喜歡你的答案,謝謝。這說得通。 -1設置究竟做了什麼? – user2001465
嗯我不知道如果我做錯了什麼,但你的答案不起作用,它也打印小寫文本。 – user2001465
有可能是錯的 - 我現在不是個人電腦,明天我會檢查它。 –
確切的正則表達式取決於您的ls命令的輸出格式。假設你不使用ls命令的別名,你可以試試這個:
ls -R | grep -o -w "[A-Z]*"
注意,與-R
在LS,你會遞歸列出當前目錄下的目錄和文件。 grep選項-o
告訴grep只打印文本的匹配部分。 -w
選項告訴grep只考慮整個單詞的匹配。 "[A-Z]*"
是一個正則表達式來過濾只有大寫的單詞。
請注意,該正則表達式將打印TEST.txt以及TEXT.TXT。換句話說,它只會考慮由字母組成的名字。
它是ls
其中列出了文件,而不是grep
,所以這是你需要指定你想要「/」追加到目錄。使用ls --classify
將「/」追加到目錄中。
grep
用於處理來自ls
(或其他來源,一般來說)的結果,只顯示與您指定的模式相匹配的行。它不限於大寫字符。您可以將其限制爲只包含大寫字符和「/」(grep -E '^[A-Z/]*$
),或者如果您還需要數字,句點等,則可以用grep -v -E [a-z]
過濾掉包含小寫字符的行。
由於grep
不是列出文件的程序,它不是你想要執行遞歸的地方。如果您使用ls -R
,則ls
可遞歸列出路徑。但是,您只需要以這種方式獲取文件路徑的最後一個組件。
您可能想要考慮使用find
來處理遞歸。這個工作對我來說:
find . -exec ls -d --classify {} \; | egrep -v '[a-z][^/]*/?$'
我要指出,使用ls --classify
追加「/」到目錄的結尾一些其他人物也可以附加到其他類型的,它可以分類路徑。例如,它可能會將「*」附加到可執行文件的末尾。如果這不是好的,但你可以單獨列出目錄和其他路徑,這可以通過運行find
兩次來解決 - 一次用於目錄,然後再用於其他路徑。這個工作對我來說:
find . -type d | egrep -v '[a-z][^/]*$' | sed -e 's#$#/#'
find . -not -type d | egrep -v '[a-z][^/]*$'
一個好的起點是男人grep: -/ – JohnTortugo
我有,但它真的沒有給我太多的工作。在這個我會承認,我是一個新手,所以我不太確定我應該用什麼搜索字符串。 D: – user2001465