我有一个包含以下内容的bash变量:
<a onclick="return:false;" href="https://example.com/file-X.Y.Z.zip"><div class="btn">Linux</div></a>
我想做的是提取href部分。我确实需要获取文件名。
我该怎么做?我已经尝试了sed
和awk
,但没有太多运气......虽然我对这些工具完全是新手,所以这肯定是我的错。< / p>
答案 0 :(得分:3)
对于简单的情况,您可以使用sed:
sed -r 's/.*href="([^"]+).*/\1/g'
答案 1 :(得分:2)
在发出必要警告之后请不要使用Bash,sed,其他简单工具解析HTML,在这种情况下:
$ echo "$var"
<a onclick="return:false;" href="https://example.com/file-X.Y.Z.zip"><div class="btn">Linux</div></a>
$ echo "$var" | sed -E 's/^.*href/href/; s/>.*//'
href="https://example.com/file-X.Y.Z.zip"
或者,纯粹的Bash:
$ [[ $var =~ (href=\"[^\"]*\") ]] && echo "${BASH_REMATCH[1]}"
href="https://example.com/file-X.Y.Z.zip"
答案 2 :(得分:1)
Bash不应该用于此类事情,但您可以使用grep
:
html='<a onclick="return:false;" href="https://example.com/file-X.Y.Z.zip"><div class="btn">Linux</div></a>'
echo "$html" | grep -o 'href="[^"]*' | tail -c +7
使用tail
删除href=
部分也会打印:
https://example.com/file-X.Y.Z.zip
如果你只想要文件名,你可以这样做:
filename=$(basename $(echo "$html" | grep -o 'href="[^"]*' | tail -c +7))
echo "$filename"
获得:
file-X.Y.Z.zip
答案 3 :(得分:0)