2013-03-06 50 views
1

我有一個目錄列表,其中大多數格式爲./[foobar]/。但是,有些格式爲./[foo] bar/正則表達式 - 找到不匹配的文件

我想用find(或其他一些公用事業我的殼報價)找到這些目錄匹配(即具有方括號外面的文字)的第一圖案。到目前爲止,我無法找到一種方法來「反轉」我的模式。

任何方式來做到這一點?

+0

爲了澄清 - 你正在尋找有''//字符之間的文本字符串相匹配的正則表達式是不是之間'[] '人物?這是否意味着任何不匹配'/[.*]/'的字符串 - 適當地轉義'/'和'[]'字符,當然......?至於「匹配的東西是不是」...看到http://stackoverflow.com/questions/406230/regular-expression-to-match-string-not-containing-a-word – Floris 2013-03-06 17:14:39

回答

4

您可以將find與grep和-v選項結合使用。 find . -type d | grep -v "[foobar]"

+0

可能是最簡單的解決方案。 – 2013-03-07 11:35:48

+0

這是不正確的。你需要切換到'grep -Fv'來切換到文字匹配,或者轉義正則表達式特殊的'\ ['因爲當前正則表達式將匹配任何包含'f'或'o'或'b'或' a''或'r'任何地方。 – tripleee 2018-02-21 04:59:14

1

find通過!-not支持否定。後者不符合POSIX標準。爲了使用!,你必須在它之前加上反斜槓或將它放在單引號內。

2

一個簡單的正水珠會在這個特殊的例子工作:

$ ls 
[a]b [ab] 
$ echo \[*\] 
[ab] 

對於更爲複雜的模式可以啓用extglob

!(pattern-list) 
    Matches anything except one of the given patterns 

and similar globs

或者使用find:

find dir ! -name ... 
+0

工程一般,但管道'發現'''grep'似乎更容易。 – 2013-03-07 11:37:04

+0

只要你不打算使用它,只要看看,這將是很好的,但我認爲glob更容易(並且如果文件名中有空格,則更安全)。 – Kevin 2013-03-07 14:45:08

1
find -type d -name '*\]?*' 

除非你堅持開括號檢驗...