2015-11-21 195 views
1

我想找到名稱,如文件...(1-9)...正則表達式在命令行

find . -regex '.*/.*\([1-9]\).*' 

我第一次使用這一個,但它似乎給我1 - 所有文件9在他們的路上。 我嘗試

find . -regex '.*/.*([1-9]).*' 

和它的作品。但我不知道爲什麼。我記得在正則表達式中括號是指表達式嗎?或者你想稍後用\ 1,\ 2來引用它?這就是我使用反斜槓來逃避它的原因。

任何人都可以幫我嗎? Thx

對不起我在這裏混淆?我想要像書(1).pdf而不是book1.pdf 。 [1-9]。不可行?

+0

爲什麼不:'找到。 -regex'。* [1-9]。*''(你實際上不需要'-regex') – anubhava

+0

@anubhava他希望'[1-9]'出現在文件名中。 –

+0

@anubhava一個可能的答案是書(1).pdf,book1.pdf不是我要找的 –

回答

0

你甚至不需要find這個。只需使用全局正則表達式匹配([1-9)模式:

printf "%s\n" *\([1-9]\)* 

注意,這將列出的所有文件和子目錄在當前路徑與名稱([1-9])

如果你只想列出這種模式文件,然後使用:

find . -maxdepth 1 -name '*([1-9])*' -type f 
+0

但爲什麼我的第一個正則表達式失敗,但第二次工作? –

+0

Thx u也提供了一個有用的選項:) –

+0

'find。 -regex'。* /。*([1-9])。*''起作用,因爲'('和')'作爲文字圓括號。當你使用''。* /。* \([1-9] \)。*'',那麼'('和')'作爲正則表達式分組,因此任何帶有[1-9]的文件/目錄匹配。話雖如此,我在答案中顯示的是更好的選擇。 – anubhava

0

您需要使用否定字符類。

find . -regex '.*/[^/]*\([1-9]\)[^/]*$' 
+0

你的答案不起作用? –

+0

你檢查過嗎? –

+0

是的,可能與我使用第一個正則表達式的輸出相同。順便說一句,我重申......我的問題不清楚〜 –