これは非常に面倒ですが、はるかに単純な作業です。このguideによると、私はこれを書いた: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 \
私は最後にこれを受け取る & として、私は成功したテーブルから各リンクを抽出し、すべてが正しく連結されます、しかし、代わりのアンパサンドを再現します各リンク:
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 –