[英]How do I grep multiple possible extensions recursively
這個問題與其他grep模式匹配問題不同,因為我們正在尋找大量的文件擴展名,因此該問題的內容冗長且乏味,無法鍵入: grep -r -i --include '*.ade' --include '*.adp' ... CP_Image ~/path[12345]
當Google出於安全原因阻止我上傳附件時,我正嘗試通過電子郵件發送靜態網站的備份。 他們的支持頁面顯示 :
您無法發送或接收以下文件類型:
.ade,.adp,.bat,.chm,.cmd,.com,.cpl,.exe,.hta,.ins,.isp,.jar,.jse,.lib,.lnk,.mde,.msc ,.msp,.mst,.pif,.scr,.sct,.shb,.sys,.vb,.vbe,.vbs,.vxd,.wsc,.wsf,.wsh
我在這里轉換並測試了以下正則表達式:
/.*\.(ade|adp|bat|chm|cmd|com|cpl|exe|hta|ins|isp|jar|jse|lib|lnk|mde|msc|msp|mst|pif|scr|sct|shb|sys|vb|vbe|vbs|vxd|wsc|wsf|wsh)/gi
並嘗試使用以下命令運行它:
ls -lahR | grep '.*\.(ade|adp|bat|chm|cmd|com|cpl|exe|hta|ins|isp|jar|jse|lib|lnk|mde|msc|msp|mst|pif|scr|sct|shb|sys|vb|vbe|vbs|vxd|wsc|wsf|wsh)'
沒用 我認為grep無法正確解釋and( |
)符號,因為ls -lahR | grep '.*\\.html'
ls -lahR | grep '.*\\.html'
有效
普通grep使用基本正則表達式(BRE)。 在BRE中,捕獲組由\\(...\\)
表示,交替op由\\|
引用\\|
grep '.*\.\(ade\|adp\|bat\|chm\|cmd\|com\|cpl\|exe\|hta\|ins\|isp\|jar\|jse\|lib\|lnk\|mde\|msc\|msp\|mst\|pif\|scr\|sct\|shb\|sys\|vb\|vbe\|vbs\|vxd\|wsc\|wsf\|wsh\)'
要么
grep -E '.*\.(ade|adp|bat|chm|cmd|com|cpl|exe|hta|ins|isp|jar|jse|lib|lnk|mde|msc|msp|mst|pif|scr|sct|shb|sys|vb|vbe|vbs|vxd|wsc|wsf|wsh)'
通過啟用-E參數來使用--extended-regex
。
添加標志-E
表示它是擴展的正則表達式。 從GNU Grep 2.1開始 :默認值為“基本正則表達式”,並且
[i] n基本正則表達式元字符'?','+','{','|','('和')'失去了特殊的含義。
我正在遞歸地嘗試查找具有指定擴展名的文件。
與-iregex
選項一起使用find
更好:
find . -regextype posix-egrep -iregex '.*\.(ade|adp|bat|chm|cmd|com|cpl|exe|hta|ins|isp|jar|jse|lib|lnk|mde|msc|msp|mst|pif|scr|sct|shb|sys|vb|vbe|vbs|vxd|wsc|wsf|wsh)'
在OSX上使用:
find -E . posix-egrep -iregex '.*\.(ade|adp|bat|chm|cmd|com|cpl|exe|hta|ins|isp|jar|jse|lib|lnk|mde|msc|msp|mst|pif|scr|sct|shb|sys|vb|vbe|vbs|vxd|wsc|wsf|wsh)'
排除給定擴展名的bash方法:使用擴展的globbing
shopt -s extglob nullglob
ls *.!(ade|adp|bat|chm|cmd|com|cpl|exe|hta|ins|isp|jar|jse|lib|lnk|mde|msc|msp|mst|pif|scr|sct|shb|sys|vb|vbe|vbs|vxd|wsc|wsf|wsh)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.