2010-01-01 68 views
2

我想使用grep來找出在一堆文件中是否使用了html類。正則表達式不僅可以找到<p class="foo">,也可以找到<p class="foo bar foo-bar">在HTML中查找類名的正則表達式

到目前爲止我能找到類=「富」與下面這個例子中,不能使其與多類名工作:

grep -Ern "class=\"result+(\"|)" *

有什麼建議?謝謝! 邁克

回答

1

要看什麼元字符您的grep supprts,嘗試:

'類= \ 「(即[az] +?)+ \」'

14

怎麼是這樣的:

grep -Erno 'class[ \t]*=[ \t]*"[^"]+"' * 

這也將允許更多的空白,應該給你輸出類似於:

1:class="foo bar baz" 
3:class = "haha" 

要查看使用的所有類,你從上面的輸出可以通過管道到以下幾點:

cut -f2 -d'"' | xargs | sort | uniq 
+0

爲例-o標誌是好的。我不知道這件事 - 肯定會打敗我通常用來打印匹配字符串的perl命令。 – 2010-01-01 21:06:28

+0

謝謝Kaleb!仍然圍繞着正則表達式......我真的很喜歡用「零或多個」空格或製表符來使用這個明星......然後我不需要使用這些條件。很有幫助。 – Mike 2010-01-04 15:53:52

+0

要搜索任何特定類的使用(在本例中爲「users」):'grep -Ern'class [\ t] * = [\ t] *「[^」] * users [^「] *」' *' – bjudson 2015-01-16 17:14:57

0

正則表達式解析HTML一個非常糟糕的工具。試試看simpleXML(http://php.net/manual/en/book.simplexml.php)。在HTML上滾動您自己的regEx是乞求的麻煩。

+0

請參閱http://www.codinghorror.com/blog/archives/001311.html – Wim 2010-01-01 20:59:46

+0

查找解析器eg這裏:http://stackoverflow.com/questions/773340/can-you-provide-an-example-of-parsing-html-with-your-favorite-parser – Svante 2010-01-01 21:05:08

+6

這不是解析HTML,這是模式匹配,什麼正則表達式。 – 2010-01-01 21:09:43

1

不要做。它會讓你瘋狂:RegEx match open tags except XHTML self-contained tags

而是使用HTML解析器。這並不難。

編輯:這是在PowerShell中

Get-ChildItem -Recurse *.html | where { 
    ([xml](Get-Content $_)).SelectNodes('//*') | where { $_.GetAttribute("class").Contains("foo") } 
} 
+0

從命令行?我還沒有找到。關心爲OP開發一個? – slebetman 2010-01-04 00:12:23

+1

@slebetman:完成。 – 2010-01-04 15:23:19