簡體   English   中英

Linux find 命令:搜索包含括號的文件名

[英]Linux find command: searching for a filename containing parentheses

我需要找到文件名如下的文件:

<some regex-matched text> (1).<some regex-matched text>

即我想搜索包含的文件名

  • 以空格結尾的文本
  • 然后是一個左括號(括號)
  • 后跟數字 1
  • 后跟一個右括號
  • 可能后跟一個點,后跟一些更多的文字......

我先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.

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