有沒有可能從命令行Wget頁面的標題?Wget頁面標題
輸入:
$ wget http://bit.ly/rQyhG5 <<code>>
輸出:
If it’s broke, fix it right - Keeping it Real Estate. Home
有沒有可能從命令行Wget頁面的標題?Wget頁面標題
輸入:
$ wget http://bit.ly/rQyhG5 <<code>>
輸出:
If it’s broke, fix it right - Keeping it Real Estate. Home
這個腳本會給你你需要的東西:
wget --quiet -O - http://bit.ly/rQyhG5 \
| sed -n -e 's!.*<title>\(.*\)</title>.*!\1!p'
但也有很多的情況下它打破了,包括在頁面正文中有一個<title>...</title>
,或者標題位於多行上。
這可能是一個好一點:
wget --quiet -O - http://bit.ly/rQyhG5 \
| paste -s -d " " \
| sed -e 's!.*<head>\(.*\)</head>.*!\1!' \
| sed -e 's!.*<title>\(.*\)</title>.*!\1!'
但你的頁面包含以下頭部開口,它不適合你的情況:
<head profile="http://gmpg.org/xfn/11">
同樣,這可能會更好:
wget --quiet -O - http://bit.ly/rQyhG5 \
| paste -s -d " " \
| sed -e 's!.*<head[^>]*>\(.*\)</head>.*!\1!' \
| sed -e 's!.*<title>\(.*\)</title>.*!\1!'
但還是有辦法解決它,包括頁面中沒有標題/標題。
同樣,一個更好的解決方案可能是:
wget --quiet -O - http://bit.ly/rQyhG5 \
| paste -s -d " " \
| sed -n -e 's!.*<head[^>]*>\(.*\)</head>.*!\1!p' \
| sed -n -e 's!.*<title>\(.*\)</title>.*!\1!p'
,但我相信我們能找到一種方法來打破它。這就是爲什麼一個真正的XML解析器是正確的解決方案,但作爲你的問題被標記爲shell
,上面它是我可以最好的。
paste
和2 sed
可以合併成一個sed,但可讀性較差。然而,這個版本對多行標題的工作的優勢:
wget --quiet -O - http://bit.ly/rQyhG5 \
| sed -n -e 'H;${x;s!.*<head[^>]*>\(.*\)</head>.*!\1!;T;s!.*<title>\(.*\)</title>.*!\1!p}'
更新:
正如在評論中解釋,上述最後的sed使用T
命令,它是GNU擴展。如果你沒有一個兼容的版本,你可以使用:
wget --quiet -O - http://bit.ly/rQyhG5 \
| sed -n -e 'H;${x;s!.*<head[^>]*>\(.*\)</head>.*!\1!;tnext;b;:next;s!.*<title>\(.*\)</title>.*!\1!p}'
更新2:
如上仍然沒有工作在Mac上,嘗試:
wget --quiet -O - http://bit.ly/rQyhG5 \
| sed -n -e 'H;${x;s!.*<head[^>]*>\(.*\)</head>.*!\1!;tnext};b;:next;s!.*<title>\(.*\)</title>.*!\1!p'
和/或
cat <<EOF> script
H
\$x
\$s!.*<head[^>]*>\(.*\)</head>.*!\1!
\$tnext
b
:next
s!.*<title>\(.*\)</title>.*!\1!p
EOF
wget --quiet -O - http://bit.ly/rQyhG5 \
| sed -n -f script
(注意在之前的以避免可變擴展。)
它接縫:next
不喜歡以$
作爲前綴,這可能是一些sed版本中的問題。
太棒了!但是我嘗試了最後一個解決方案,並得到:'sed:1:「H; $ {x; s!。*
] *> \(...」:無效的命令代碼T'作爲錯誤 – 2012-02-16 17:27:44'T'是一個用於sed的GNU擴展你可能正在Linux上運行腳本,在這種情況下,你可以通過'; tnext; b;:next;'來更改'; T;'我將更新答案。 – jfg956 2012-02-16 17:31:24
另一個error:'sed:2:「H; $ {x; s!。*
] *> \(...」:意想不到的EOF(正在執行)')運行OSX,但是我在這臺機器上釀造了gnu-sed ,那麼令人驚訝 – 2012-02-16 17:40:31以下將拉動任何l thinks認爲頁面的標題,從所有的正則表達式廢話中拯救你。假設你正在檢索的頁面是符合標準的l enough,這不應該中斷。
lynx -dump example.com | sed '2q;d'
您需要解析檢索到的html並提取html標題的文本內容。爲了理智,不要嘗試爲此使用正則表達式。 – 2012-02-16 13:33:26