我有一個目錄列表,其中大多數格式爲./[foobar]/
。但是,有些格式爲./[foo] bar/
。正則表達式 - 找到不匹配的文件
我想用find
(或其他一些公用事業我的殼報價)找到這些目錄不匹配(即具有方括號外面的文字)的第一圖案。到目前爲止,我無法找到一種方法來「反轉」我的模式。
任何方式來做到這一點?
我有一個目錄列表,其中大多數格式爲./[foobar]/
。但是,有些格式爲./[foo] bar/
。正則表達式 - 找到不匹配的文件
我想用find
(或其他一些公用事業我的殼報價)找到這些目錄不匹配(即具有方括號外面的文字)的第一圖案。到目前爲止,我無法找到一種方法來「反轉」我的模式。
任何方式來做到這一點?
您可以將find與grep和-v選項結合使用。 find . -type d | grep -v "[foobar]"
可能是最簡單的解決方案。 – 2013-03-07 11:35:48
這是不正確的。你需要切換到'grep -Fv'來切換到文字匹配,或者轉義正則表達式特殊的'\ ['因爲當前正則表達式將匹配任何包含'f'或'o'或'b'或' a''或'r'任何地方。 – tripleee 2018-02-21 04:59:14
find
通過!
和-not
支持否定。後者不符合POSIX標準。爲了使用!
,你必須在它之前加上反斜槓或將它放在單引號內。
一個簡單的正水珠會在這個特殊的例子工作:
$ ls
[a]b [ab]
$ echo \[*\]
[ab]
對於更爲複雜的模式可以啓用extglob
:
!(pattern-list)
Matches anything except one of the given patterns
或者使用find:
find dir ! -name ...
工程一般,但管道'發現'''grep'似乎更容易。 – 2013-03-07 11:37:04
只要你不打算使用它,只要看看,這將是很好的,但我認爲glob更容易(並且如果文件名中有空格,則更安全)。 – Kevin 2013-03-07 14:45:08
find -type d -name '*\]?*'
除非你堅持開括號檢驗...
爲了澄清 - 你正在尋找有''//字符之間的文本字符串相匹配的正則表達式是不是之間'[] '人物?這是否意味着任何不匹配'/[.*]/'的字符串 - 適當地轉義'/'和'[]'字符,當然......?至於「匹配的東西是不是」...看到http://stackoverflow.com/questions/406230/regular-expression-to-match-string-not-containing-a-word – Floris 2013-03-06 17:14:39