我创建了一个由几个shell脚本组成的小程序,它们一起工作,几乎完成了 一切似乎都很好,除了一件我不确定该怎么做的事情。 我需要,能够完成这个项目...
似乎有许多路线可以采取,但我无法到达那里......
我有一些卷曲的结果,包括不同的链接在内的大量未使用的数据,并且在所有数据之间有一堆类似的链接 我只需要获得(变量)最高数字的链接(没有始终相同的文本)
the links are all similar, and have this structure:
<a href="https://always/same/link/same-name_19.html">always same text</a>
<a href="https://always/same/link/same-name_18.html">always same text</a>
<a href="https://always/same/link/same-name_17.html">always same text</a>
我正在考虑类似的事情;
content="$(curl -s "$url/$param")"
linksArray= get from $content all links that are in the href section of the links
that contain "always same text"
declare highestnumber;
for file in $linksArray
do
href=${1##*/}
fullname=${href%.html}
OIFS="$IFS"
IFS='_'
read -a nameparts <<< "${fullname}"
IFS="$OIFS"
if ${nameparts[1]} > $highestnumber;
then
highestnumber=${nameparts[1]}
fi
done
echo ${nameparts[1]}_${highestnumber}.html
结果:
https://always/same/link/unique-name_19.html
这只是我的猜测,任何可以从bash脚本运行的代码都是oke ... 感谢...
我找到了this nice program,它可以通过以下方式轻松安装:
# 64bit version
wget -O xidel/xidel_0.9-1_amd64.deb https://sourceforge.net/projects/videlibri/files/Xidel/Xidel%200.9/xidel_0.9-1_amd64.deb/download
apt-get -y install libopenssl
apt-get -y install libssl-dev
apt-get -y install libcrypto++9
dpkg -i xidel/xidel_0.9-1_amd64.deb
它看起来很棒,但我不确定如何根据我的需要调整它。
基于该链接和以下答案,我想可能的解决方案是......
使用xidel,或者按照this link中的建议使用“$ sed -n's / .href =”([^“])。* / \ 1 / p'file”,但是调整它以获得与html标签的链接,如:
&LT; a href =“https://always/same/link/same-name_17.html”&gt;始终相同的文字&lt; / A&GT;
答案 0 :(得分:3)
继续发表评论,您可以使用grep
,sort
和tail
来隔离相似链接列表中的最大数量而不会有太多麻烦。例如,如果您所描述的链接列表(我已将它们保存在文件dat/links.txt
中以用于示例),您可以轻松地隔离变量中的最大数字:
示例列表
$ cat dat/links.txt
<a href="https://always/same/link/same-name_19.html">always same text</a>
<a href="https://always/same/link/same-name_18.html">always same text</a>
<a href="https://always/same/link/same-name_17.html">always same text</a>
解析编号最高的链接
$ myvar=$(grep -o 'https:.*[.]html' dat/links.txt | sort | tail -n1); \
echo "myvar : '$myvar'"
myvar : 'https://always/same/link/same-name_19.html'
(注意:上面的命令是由行继续'\'
分开的所有一行)
直接应用于curl
无论您的列表是在文件中,还是由curl -s
返回,您都可以应用相同的方法来隔离返回列表中的最高编号链接。您可以单独使用curl
命令来使用流程替换,也可以将结果传递给grep
。例如。正如我原来的评论中所述,
$ myvar=$(grep -o 'https:.*[.]html' < <(curl -s "$url/$param") | sort | tail -n1); \
echo "myvar : '$myvar'"
或将curl
的结果传递给grep
,
$ myvar=$(curl -s "$url/$param" | grep -o 'https:.*[.]html' | sort | tail -n1); \
echo "myvar : '$myvar'"
(同一行续篇。)
答案 1 :(得分:1)
为什么不使用Xidel与xquery对链接进行排序并返回最后一个?
xidel -q links.txt --xquery "(for $i in //@href order by $i return $i)[last()]" --input-format xml
input-format参数确保您在txt文件的开头和结尾不需要任何html标记。
如果我没弄错的话,在最新的Xidel中,-q(安静)param被-s(无声)取代。