2017-04-06 91 views
0

結束我需要它返回的所有文件,無需數字後綴的命令(* 2.0,* 0.123,...)正則表達式:查找文件不具有數字後綴

例如具有三個文件:

gg.p qqq.449 rtr55 

我想只有這些發現:

./rtr55 
./gg.p 

我試圖用grep找到他們。不過,我只得到了沒有效果的結果。

find -type f | grep -v '\.[0-9]+$' 

(此命令返回:)

./qqq.449 
./rtr55 
./gg.p 

因此,有可能是一些正則表達式格式錯誤。你知道嗎,如何解決它?

+0

嘗試'grep -v'\。[0-9] \ + $'' –

回答

1

+運算符屬於擴展正則表達式。有許多解決方法:

find -type f | grep -v '\.[0-9]\+$' 
find -type f | egrep -v '\.[0-9]+$' 
find -type f | grep -E -v '\.[0-9]+$' 
find -type f | grep -v '\.[0-9][0-9]*$' 
0

爲什麼要使用grep

find -regex '.*\.[0-9][0-9]*' -prune -o -type f 

如果你的表情是很簡單(或您的find不支持-regex),你可以使用-name代替-regex但點後水珠通配符無法捕捉到數字的任意量。這裏有一個或兩個:

find -name '*.[0-9]' -prune -o -name '*.[0-9][0-9]' -prune -o -type f 

請注意,這不是純粹的效率問題; grep根本不會做正確的事情,如果你遇到過帶有換行符的文件名。

+0

MacOS上'find'的正則表達式支持不支持'[0-9] +',所以我放了一點繁瑣的表情。我想在Linux上你可能會使用plus量詞,但注意它不是可移植的。 – tripleee

+0

我試過找到-regex'。* \。[0-9] [0-9] *'-prune -o -type f,但它對數字返回沒有影響。此外-regex選項不符合標準。當我將它粘貼到SunOS時,它沒有識別-regex選項。 – 8ToThePowerOfMol

+0

已更新爲僅使用-name的版本。 – tripleee