gpt4 book ai didi

bash - 通过 XMLStarlet 取消转义符号 (&) - 窃听 &

转载 作者:行者123 更新时间:2023-11-29 09:42:17 31 4
gpt4 key购买 nike

这是一项相当烦人但相当简单的任务。根据这个guide ,我这样写:

#!/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\&amp;B=2

但实际上,我在寻找类似的东西:

https://example.com/hello-world/?A=1&B=2

想法是使用反斜杠 \& 转义字符,以便它被忽略。最初,我尝试将它直接放入 -o "\&"\ 而不是 -o "$ampersand"\ 并删除 ampersand=$(echo '\&') 在这种情况下。结果还是一样。

本质上,通过删除反斜杠它仍然输出:

https://example.com/hello-world/?A=1&amp;B=2

只是去掉了&后面的\

为什么?

我确定这是缺少的一些基本内容。

最佳答案

& 是在 XML 文档中打印 & 的正确方法,但由于您只需要一个普通的 URL,因此输出不应该是 XML。因此,您需要通过将 --text-T 传递给 sel 命令来切换到文本模式。

您的示例输入不太有效,因为 example.com 没有任何 table 元素,但这里是一个从 p 元素构建链接的工作示例。

content=$(wget 'https://example.com/' -O -)
xmlstarlet fo --html <<<"$content" |
xmlstarlet sel -T -t \
-m '//p[a]' \
--if 'not(starts-with(a//@href,"http"))' \
-o 'https://example.com/' \
--break \
-v 'a//@href' \
-o '/?A=1' \
-o '&' \
-o 'B=2' -n

输出是

http://www.iana.org/domains/example/?A=1&B=2

关于bash - 通过 XMLStarlet 取消转义符号 (&) - 窃听 &,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46255304/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com