[英]Match optional pattern with find command
我想將所有具有典型 fortran 文件擴展名的文件與 find 匹配。 典型的擴展名是 .f .F .for .FOR .f90 .F90 .f95 .F95 .f03 .F03 .f08 .F08 .f15 .F15 .f18 .F18
到目前為止,我嘗試的是find * -name "*\.[Ff][0-9Oo][0-9Rr]"
這適用於所有提到的擴展名,盡管有 .f 和 .F。 為此,我必須使 [0-9Oo] 和 [0-9Rr] 可選,這通常用“?”完成。 但是,這個find * -name "*\.[Ff][0-9Oo]?[0-9Rr]?"
不適用於我的 find 版本。
使用 GNU find
,您可以使用
find * -regextype posix-extended -regex '.*\.[Ff][0-9Oo]?[0-9Rr]?'
該模式匹配一個完全匹配的字符串:
.*\.
- 最右邊的任何文本.
包括它[Ff]
- F
或f
[0-9Oo]?
- 可選數字, O
或o
[0-9Rr]?
- 可選數字, R
或r
。您還可以使用僅使用 glob 模式的非正則表達式方法:
find * ( -name "*.[Ff][0-9oO][0-9rR]" -o -name "*.[Ff]" )
請注意,這里的*
glob 模式匹配任何文本。 在前面的解決方案中,它是一個量詞,一個使前面的模式匹配零次或多次的運算符。 此外,在 glob 模式中, .
匹配文字點,無需轉義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.