我有一個excersise中,我要打印包含在當前文件夾中的所有文件名,其中包含的字母[a-k]
的其中之一,[m-p]
和[1-9]
ATLEAST 1次(每)。我可能不得不使用ls
(glob-style)。猛砸LS(通配符式樣)
2
A
回答
3
如果順序很重要,那麼你可以使用通配符:
$ ls *[a-k]*[m-p]*[1-9]*
ajunk404 am1 cn5
否則爲每個組分別只grep
:
ls | grep "[a-k]" | grep "[m-p]" | grep "[1-9]"
1ma
ajunk404
am1
cn5
m1a
注:ls
將顯示的目錄,如果你真的只想文件使用find
裏面:
find . -maxdepth 1 -type f | grep "[a-k]" | grep "[m-p]" | grep "[1-9]"
0
如果順序不重要,並且字母出現一次或多次,可以使用鏈接greps。
ls | egrep "[a-k]" | egrep "[m-p]" | egrep "[1-9]"
如果順序的問題,那麼就使用的glob模式
ls *[a-k]*[m-p]*[1-9]*
1
100%純慶典(和有趣!)可能性:
#!/bin/bash
shopt -s nullglob
a=(*[a-k]*)
b=(); for i in "${a[@]}"; do [[ "$i" = *[p-z]* ]] && b+=("$i"); done
c=(); for i in "${b[@]}"; do [[ "$i" = *[1-9]* ]] && c+=("$i"); done
printf "%s\n" "${c[@]}"
無需外接任何處理!沒有管道!只有純粹的bash!對於名稱中帶有有趣符號的文件(例如換行符),100%安全(其他方法使用ls
則不是這種情況)。如果你想真正看到在文件名中的搞笑符號,讓他們正確地引用,以便重用的輸出,以代替過去printf
語句的使用
printf "%q\n" "${c[@]}"
。
注意。模式[a-k]
,[p-z]
是區域設置相關的。您可能需要設置LC_ALL=C
以確保[a-k]
的確表示[abcdefghijk]
而不是其他內容,例如[aAbBcCdDeEfFgGhHiIjJk]
。
希望這會有所幫助!
0
是完整的,你需要搜索所有的組合:
ls *[a-k]*[m-p]*[1-9]* *[a-k]*[1-9]*[m-p]* \
*[m-p]*[a-k]*[1-9]* *[m-p]*[1-9]*[a-k]* \
*[1-9]*[m-p]*[a-k]* *[1-9]*[a-k]*[m-p]*
相關問題
- 1. 期通配符猛砸模式替換
- 2. 猛砸LS和指揮管
- 3. 猛砸通配符和變量用法
- 4. 猛砸匹配字符串
- 5. 猛砸取代LS與循環
- 6. 字符串猛砸
- 7. 猛砸模式內匹配[試塊
- 8. 猛砸字面匹配
- 9. 猛砸字符串格式化/替換
- 10. 猛砸字符串格式化
- 11. 猛砸分割字符串
- 12. 猛砸與通配符和隱藏文件
- 13. 猛砸更正格式化
- 14. 猛砸可變格式
- 15. 猛砸日期格式
- 16. 猛砸功能
- 17. 得到猛砸
- 18. 猛砸爲NULL
- 19. 猛砸與管
- 20. 在猛砸
- 21. 猛砸描述
- 22. 猛砸串
- 23. 格局猛砸
- 24. 在猛砸
- 25. 在猛砸
- 26. 猛砸從線
- 27. 從猛砸
- 28. 從猛砸
- 29. 猛砸忽略$
- 30. 遍歷猛砸
我會用'grep'和正則表達式:'LS -1 | grep -E「your_regex」' – Blender
好吧,我不知道是什麼正則表達式,而且我實際上必須使用ls我認爲.. thx – user1923376
這個功課是? – fbynite