簡體   English   中英

使用 find 命令匹配可選模式

[英]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] - Ff
  • [0-9Oo]? - 可選數字, Oo
  • [0-9Rr]? - 可選數字, Rr

您還可以使用僅使用 glob 模式的非正則表達式方法:

find * ( -name "*.[Ff][0-9oO][0-9rR]" -o -name "*.[Ff]" )

請注意,這里的* glob 模式匹配任何文本。 在前面的解決方案中,它是一個量詞,一個使前面的模式匹配零次或多次的運算符。 此外,在 glob 模式中, . 匹配文字點,無需轉義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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