簡體   English   中英

linux 查找名稱中帶有可選字符的文件

[英]linux find files with optional character in their name

假設我有兩個文件: acabc 我想找到一個正則表達式來匹配這兩個文件。 通常我希望以下正則表達式可以工作,但它永遠不會:

find ./ -name ab?c

我試過逃避或不逃避問號,這似乎從來沒有奏效。 通常在我發現的正則表達式文檔中; ? 意思是:前一個字符重復了 0 或 1 次,但find似乎不明白這一點。

我在兩個不同的 find 版本上嘗試過這個:GNU find version 4.2.31 和 find (GNU findutils) 4.6.0

PS:這適用於* ,但我特別想只匹配一個可選字符

find ./ -name a*c

./ac
./abc

傳遞給-name的表達式不是正則表達式,而是全局表達式。 (單個)glob 表達式不能用於您的用例,但您可以使用正則表達式-regex

find -regex '.*/ab?c'

順便說一句,默認的正則表達式語言是 Emacs 樣式,如下所述: https : //www.emacswiki.org/emacs/RegularExpression 您可以使用-regextype更改正則表達式語言。

僅使用一個可選字符匹配表達式,請嘗試使用or選項:

touch abc ac abbc
find . -name "a?c" -or -name "ac"

只給你: abcac名稱。

通常,您可以使用or and選項構建非常復雜的查找查詢 =)

find -name選項使用 glob 模式,這與正則表達式不同。 對於球體, ? 表示任何單個字符。 如果你想要一個字符是可選的,你需要使用兩種模式:

find ./ -name abc -o -name ac

其他答案足以提供解決方案,但了解find-regex選項在整個條目上匹配是必不可少的。 所以你不能只做部分匹配:

-regex 'ab?c'

您必須使用一兩個點星:

-regex '.*ab?c.*'

同樣沒有通配符,這可以使用grep

ls . | grep 'ab\?c' 

暫無
暫無

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

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