2015-06-05 244 views
0

我有點放心使用正則表達式,但不使用grep特別,並不能弄清楚,爲什麼下面的正則表達式返回任何內容:爲什麼grep什麼都不返回?

wget -qO- 'http://www.acme.com/index.html' | grep -iPo '(?s)(^<div class="titlebar">.+?<div class="colleft">)' 

我前置因爲包羅萬象的」(S?)。 +?」包括回車符(CRLF,CR或LF,取決於文本的保存方式)。

任何想法爲什麼它不能按預期工作?

謝謝。

+2

因爲這兩個類名都不出現在wget'返回的頁面的任何地方?什麼是'(?s)'? –

+0

因爲他邪惡? –

+1

'(?s)'啓用'.'可匹配換行符的功能。 http://perldoc.perl.org/perlre.html - 這裏沒有用,因爲grep是一個面向行的工具。 –

回答

0

grep是面向行的,所以如果標籤之間有新行,grep找不到它。你會想要:

wget -qO- 'http://website.invalid/index.html' | 
perl -0777 -nE 'say for /(^<div class="titlebar">.+?<div class="colleft">)/msg' 
+0

謝謝。爲了避免安裝Perl(具有小內存的設備),我嘗試了pcregrep,但它什麼都沒返回:pcregrep -M「(。+)」input.html – Gulbahar

+0

你有什麼工具可用? sed/awk/...? –