2017-07-27 82 views
1

中提取信息,我嘗試提取標籤中的信息:使用此命令如何使用grep和正則表達式特定的標籤

<div class="rpt_price rpt_price_1">THE TEXT</div> 

t=$(curl -v --silent http://somewebsite.info/ 2>&1 | grep -E "^<div class=\"rpt_price rpt_price_1\">.*</div>$"); echo $t 

它應該會返回THE TEXT,但是它沒有任何迴應。我的錯誤是什麼?提前致謝!

+0

grep和正則表達式是用來解析HTML ...完全錯誤的工具,如果正則表達式是你的情況不夠好,你需要'grep -oP'這是不可用的...所以然後使用'sed'或'awk' ... grep主要是爲了找到不是文本操作 – Sundeep

回答

1

使用以下工作:

grep -Po "<div class=\"rpt_price rpt_price_1\">\K(.*)(?=</div>$)" 

這裏描述的-P-o選項在unix stackexchange\Kunix stackexchange上也有很好的解釋。

\K(.*)的使用將只輸出匹配和下面的文本。用(?=...$)我排除了其餘的文字。

測試:

echo "<div class=\"rpt_price rpt_price_1\">THE TEXT</div>" | grep -Po "<div class=\"rpt_price rpt_price_1\">\K(.*)(?=</div>$)" 

輸出:

THE TEXT 

另一種可能性是直接使用perl,解釋是here on superuser

perl -ne 'print $1 if /\<div class="rpt_price rpt_price_1">(.*?)\<\/div>/s' 

測試:

echo "<div class=\"rpt_price rpt_price_1\">THE TEXT</div>" | perl -ne 'print $1 if /\<div class="rpt_price rpt_price_1">(.*?)\<\/div>/s' 

輸出:

THE TEXT 
+0

我嘗試了參數'-Po',但是我得到錯誤'grep:對-P選項的支持沒有編譯進這個--disable-perl-regexp二進制文件,因爲我在iOS環境(終端) –

+0

@ GregorIsack:你有權訪問'perl',如果是的話,看看我的擴展答案。 –

+0

我剛剛在我的設備上安裝了'perl',它完美的工作!但是perl軟件包正在消耗我設備的有限存儲容量。如果沒有更好的答案,我會將其標記爲答案。感謝您的幫助! –

1

您還沒有幸免於在</div>的最後/

正確的正則表達式應該是以下幾點:

^<div class=\"rpt_price rpt_price_1\">.*<\/div>$

對於正則表達式,this是測試當你創建一個你的結果會是怎樣一個偉大的工具。

+0

仍然沒有回報,雖然我確定後的正則表達式你的改正作品!我開始懷疑'curl' –

+1

正則表達式應該沒問題,它匹配你正在搜索的東西。讓我檢查捲曲。你的目標是哪個網站? – dirtydanee

+0

這個正則表達式的工作原理,但它不會僅僅是部分:「文本」,而是整個表達式。 –