2010-12-16 172 views
1

我正在抓取使用捲曲的頁面的源,並且想要從特定標記中提取文本。sed命令從HTML中提取文本

文字是唯一標記之間:

href="http://www.website.com/some/unique/page.php?q=xyz">TEXT</a> 

我所做的是什麼:

curl -s "http://www.website.com" | sed 's|PATTERN|\1|' 

其中pattern是許多正則表達式模式我都試過之一,其中的一個:

href="http://www.website.com/some/unique/page.php?q=xyz">\(.*\)</a> 

但由於某些原因,我無法讓它工作。我要麼獲得整個頁面的源代碼,要麼完全沒有(取決於我使用的模式)。

希望有任何幫助。

+0

我也許應該使用獨特的「元素」,而不是,我很着急。是的,只是文字 – nio 2010-12-16 18:38:35

+0

那麼你想要在URL中鍵入單詞'unique'嗎? – SiegeX 2010-12-16 18:40:21

+0

來源比我提供的文字多。我想從標籤A中提取「TEXT」,其中href =「http://www.website.com/some/unique/page.php?q=xyz」,就像上面提供的模式一樣。 – nio 2010-12-16 18:42:57

回答

2

假設你想要的輸出僅僅是TEXT,這將與你給的輸入工作:

sed 's/^.*>\([^<]*\)<.*$/\1/' 

如果你想唯一輸出TEXT,你只需要那些從包含URL輸出在它的詞unique的道路,然後用這個來代替:

sed -n '/http:.*\/unique\//s/^.*>\([^<]*\)<.*$/\1/p' 
+0

這將是任何HTML標籤,對吧?我上面提供的一個元素怎麼樣? – nio 2010-12-16 18:44:02

+0

「-n」鍵默認不打印,修飾符「p」打印被替換的行。 – 2010-12-16 18:45:12

+0

@nio現在,只有在包含關鍵字'http:',後面跟'/ unique /'的行時纔會輸出'TEXT'。如果這還不夠具體,那麼就把你想要限制的模式放在第一對未轉義的'//'之間,並且在你的模式文本中退出任何'/'。不幸的是,與's'命令不同,你可以使用任何你想要的分隔符,範圍字段必須使用'//' – SiegeX 2010-12-16 18:47:57