[英]Linux find command: searching for a filename containing parentheses
我需要找到文件名如下的文件:
<some regex-matched text> (1).<some regex-matched text>
即我想搜索包含的文件名
我先find . -regex '.* \\(1\\)\\..*'
find . -regex '.* \\(1\\)\\..*'
。 但是括號有點被忽略:匹配.* 1\\..*
被返回。
在我試圖找到答案的過程中,我發現了這個頁面,涵蓋了 Linux find
。 我在這里找到了這句話:
“使用反斜杠后跟括號 '\\(', '\\)' 進行分組。”
[注意向讀者展示一個反斜杠,如該頁面所示,我將反斜杠加倍以寫出上面的單反斜杠!]
我不知道該怎么做,即在這種情況下如何逃避普通括號。 我想也許在find
表達式中加倍反斜杠可能會起作用,但它沒有。
即使我嘗試在不使用正則表達式的情況下執行此操作, find
似乎在此位置的括號和/或點存在一些問題:
mike@M17A .../accounts $ find . -name *(1).pdf
[... finds stuff OK]
mike@M17A .../accounts $ find . -name *(1).*
find: paths must precede expression: ..
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec|time] [path...] [expression]
mike@M17A .../accounts $ find . -name *(1)\.*
find: paths must precede expression: ..
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec|time] [path...] [expression]
注意在這些嘗試中的初始 * 后面放一個空格也失敗了......
那是因為您不需要轉義這些括號。 這應該工作:
find . -regex '.* (1)\(\..*\)?'
雖然捕獲組使用(括號轉義) \\(\\..*\\)
這樣我們就可以做出最后一場比賽中可選的(可能后面跟着一個點,接着一些文字)用?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.