簡體   English   中英

我如何遞歸grep多個可能的擴展

[英]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|ms‌​t|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.

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