이 작업은 상당히 짜증나지만 훨씬 간단합니다. 나는 성공적으로 테이블에서 각 링크를 추출하고 모든 것을 대신 &로 앰퍼샌드을 재현하지만, 제대로 연결된됩니다 XMLStarlet을 통해 앰퍼샌드 (&)를 이스케이프 처리하지 않음 - 버그 수정 &
#!/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 \
내가 말에이 나타납니다이
guide에 따르면,이 썼다 각 링크 :
https://example.com/hello-world/?A=1&B=2
:
https://example.com/hello-world/?A=1\&B=2
그러나 실제로는, 내가 좋아하는 뭔가를 찾고 있었다
문자는 백 슬래시 \&
을 사용하여 이스케이프 처리되므로 무시됩니다. 처음에는 -o "$ampersand" \
대신 -o "\&" \
에 직접 배치하고이 경우에는 ampersand=$(echo '\&')
을 제거했습니다. 여전히 같은 결과입니다.
본질적 슬래시 제거하여 여전히 출력 :
https://example.com/hello-world/?A=1&B=2
는 오직
&
뒤에
\
제거된다.
왜?
나는 뭔가 빠져있는 것이 틀림 없다고 확신합니다.
, 당신은 원하는 출력과 함께 일부 샘플 입력을 포함해야한다, 그래서 우리는 가능한 솔루션을 테스트 할 수 있습니다. –
당신 말이 맞습니다. 나는 너의 충고를 따를거야! 건배 @TomFenech –