这是一个相当烦人,但相当简单的任务。根据这一guide,我写了这个:Unescape通过XMLStarlet的&符(&) - Bugging &
#!/bin/bash
content=$(wget "https://example.com/" -O -)
ampersand=$(echo '\&')
xmllint --html --xpath '//*[@id="table"]/tbody' - <<<"$content" 2>/dev/null |
xmlstarlet sel -t \
-m "/tbody/tr/td" \
-o "https://example.com" \
-v "a//@href" \
-o "/?A=1" \
-o "$ampersand" \
-o "B=2" -n \
我成功地提取从表中的每个环节,一切都被正确地连接在一起,然而,而不是再现符号为&我收到这在年底每一个环节:
https://example.com/hello-world/?A=1\&B=2
但实际上,我一直在寻找类似:
https://example.com/hello-world/?A=1&B=2
这个想法是使用反斜杠\&
来避开字符,以便它被忽略。最初,我尝试将其直接放入-o "\&" \
而不是-o "$ampersand" \
,并在此情况下删除ampersand=$(echo '\&')
。还是一样的结果。
本质上,通过去除反斜杠它仍然输出:
https://example.com/hello-world/?A=1&B=2
只有所述&
后面的\
被去除。
为什么?
我确定这是缺少的基本东西。
要提高你的答案的质量,您应该包括一些样本输入与期望的输出一起,所以我们可以测试可能的解决方案。 –
你是对的。我会按照你的建议!欢呼@TomFenech –