2016-04-06 96 views
-2

我發現了一些關於正則表達式的問題,但我似乎無法完成這項工作。我想在我的模式中包含特定字符串的排除。我的用例是查找python文件中的所有行,這些行定義了具有object以外的超類的類。所以舉例如下:grep:匹配除字外的所有內容

class Class1(Superclass): #match 
class Class2(othersuperclass, Superclass): #match 
class Class3(object): #no match 

我可以使用下面的正則表達式來匹配定義類的行。我敢肯定,這不是最佳,但它是我已經和它的工作原理:

grep -n '^[[:space:]]*class[[:space:]][[:space:]]*[[:alpha:]][[:alnum:]]*[[:space:]]*(.*):' * 

但我無法弄清楚如何排除有括號內的「對象」行。

編輯:我應該更清楚。我試圖在我的文件系統中遞歸搜索文件。目前我從命令行使用grep,但如果有更好的命令行實用程序,我很高興聽到它。

+1

我通常使用'grep -v'來排除匹配模式的行。所以,例如'grep ... | grep -v對象'。 – dsh

+0

爲什麼不使用ast和os.walk? –

+0

@PadraicCunningham見編輯 – ewok

回答

0

這將做什麼你告訴我們,到目前爲止:

$ awk '/^[[:blank:]]*class[[:blank:]]+[[:alpha:]_][[:alnum:]_]*[[:blank:]]*\(.*\):/ && !/\(.*object.*\)/' file 
class Class1(Superclass): #match 
class Class2(othersuperclass, Superclass): #match 

但IDK的你有沒有包含在你的樣品輸入/輸出等情況。

相關問題