是否可以从命令行Wget页面的标题?
输入:
$ wget http://bit.ly/rQyhG5 <<code>>
Run Code Online (Sandbox Code Playgroud)
输出:
If it’s broke, fix it right - Keeping it Real Estate. Home
Run Code Online (Sandbox Code Playgroud)
这个脚本可以满足您的需求:
wget --quiet -O - http://bit.ly/rQyhG5 \
| sed -n -e 's!.*<title>\(.*\)</title>.*!\1!p'
Run Code Online (Sandbox Code Playgroud)
但是在很多情况下它会中断,包括<title>...</title>页面正文中是否存在,或者标题是否在多行上.
这可能会好一些:
wget --quiet -O - http://bit.ly/rQyhG5 \
| paste -s -d " " \
| sed -e 's!.*<head>\(.*\)</head>.*!\1!' \
| sed -e 's!.*<title>\(.*\)</title>.*!\1!'
Run Code Online (Sandbox Code Playgroud)
但它不适合您的情况,因为您的页面包含以下开头:
<head profile="http://gmpg.org/xfn/11">
Run Code Online (Sandbox Code Playgroud)
再次,这可能会更好:
wget --quiet -O - http://bit.ly/rQyhG5 \
| paste -s -d " " \
| sed -e 's!.*<head[^>]*>\(.*\)</head>.*!\1!' \
| sed -e 's!.*<title>\(.*\)</title>.*!\1!'
Run Code Online (Sandbox Code Playgroud)
但仍然有办法打破它,包括页面中没有头/标题.
同样,更好的解决方案可能是:
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'
Run Code Online (Sandbox Code Playgroud)
但我相信我们可以找到一种方法来打破它.这就是为什么一个真正的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}'
Run Code Online (Sandbox Code Playgroud)
更新:
正如在注释中解释的那样,上面的最后一个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}'
Run Code Online (Sandbox Code Playgroud)
更新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'
Run Code Online (Sandbox Code Playgroud)
和/或
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
Run Code Online (Sandbox Code Playgroud)
(注意\以前$要避免变量扩展.)
它接缝:next不喜欢以a为前缀$,这在一些sed版本中可能是一个问题.
| 归档时间: |
|
| 查看次数: |
5158 次 |
| 最近记录: |