我有一个带文件/目录列表的索引HTML文件。它只是一个通常的文件浏览器,如:
...content here...
<td><a href="20130011/">20120011/</a></td>
<td><a href="20130111/">20120111/</a></td>
<td><a href="20130211/">20120211/</a></td>
<td><a href="20130411/">20120411/</a></td>
...content here...
我不明白如何从底部提取第二行。
1)我用curl
下载了HTMLcontent=$(curl -sL "http://path-to-html")
2)然后使用
dir=$(echo $content | sed '/.*href="\([0-9]*\/\)".*/!d;s//\1/;q')
给了我最后一场比赛:20120411
。
但如何获得前一个?
我不知道物品的总数。
答案 0 :(得分:3)
此awk程序将打印倒数第二行:
echo ${content} | awk '{ pen = ult; ult = $0 } END { print pen }'
这将打印倒数第二个匹配行:
echo ${content} | awk '/href="([0-9]{8}\/)"/ { pen = ult; ult = $0 } END { print pen }'
如果您只想提取第一个捕获组:
echo ${content} | awk 'match($0, /href="([0-9]{8}\/)"/, a) { pen = ult; ult = a[1] } END { print pen }'
全部放在一起:
bash-4.2$ dir=$(curl -sL http://www.arteetmarte.no/tmp/index.html |
awk 'match($0, /href="([0-9]{8}\/)"/, a) {
pen = ult
ult = a[1]
}
END {
print pen
}
')
bash-4.2$ echo ${dir}
20130918/
经过测试:GNU Awk 4.1.0, API: 1.0
答案 1 :(得分:0)
使用awk
可能会更容易一些dir=$(echo "$content"|awk '/href=/{x=p;p=$0}END{sub(/.*">/,"",x);sub(/<.*/, "",x); print x}')
答案 2 :(得分:0)
dir=$(echo $content | sed sed -n '/href="\([0-9]\{1,\}\/\)"/ {s|.*href="\([0-9]\{1,\}/\)".*|-\1-|;H;}
$ {x;l;s|.*-\([0-9]\{1,\}/\)-\(\n-[0-9]\{1,\}/-\)\{1\}$|\1|p;}')
\{1\}$
中的1指定必须从末尾删除多少行