C'est une tâche un peu plus simple qui me dérange depuis un certain temps. Je donne les résultats suivants:XMLStarlet remove last -n (nouvelle ligne) en utilisant Sed
homepage=$(curl "https://example.com/")
xmlstarlet --quiet fo --html <<<"$homepage" |
xmlstarlet sel -T -t \
-m "//*[@id='financial']/tbody/tr/td" \
--if 'not(starts-with(a//@href,"http"))' \
-o 'https://example.com' \
--break \
-v 'a//@href' \
-o '/?start=1' \
-o '&' \
-o 'end=2' -n | \
sed '${/^$/d;}' \
>> "results.txt"
Ce que je veux faire est de retirer la dernière produit par saut de ligne xmlstarlet
dans -o 'end=2' -n | \
. Quand il atteint la fin si la liste des liens, il produit toujours un -n
(saut de ligne) comme si il devait continuer à ajouter plus de liens, mais en fait je veux éviter la dernière -n
instance respective à la dernière href
.
Mon sed '${/^$/d;}' \
qui devrait faire retourne l'erreur suivante:
sed: ${/^$/d;}: No such file or directory
sed: : No such file or directory
Il ne conduit pas en quelque sorte le STDOUT
avant la sed
STDIN
correctement. Dans l'un de mes avant questions je travaillais avec quelque chose de similaire et cette commande sed
a fonctionné pour moi plus tôt:
sed 's/\\&/\&/g'
D'autre part, j'ai aussi essayé d'utiliser:
# The -e flag
sed -e '${/^$/d;}'
Ce qui ne fonctionne pas pour moi non plus.
Est-ce que cela peut être fait directement à partir de XMLStarlet sans avoir à ajouter un tuyau supplémentaire sed
?
Quel est le problème avec mon sed
? Quelle est la bonne méthode sed
?
Supprimer tous les espaces après \ – Cyrus
Bonjour @Cyrus Je ne comprends pas complètement. D'après cette [question] (https://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-a-bash-variable), j'ai trouvé que 'sed -e 's/[[: space: ]] * $ // ''devrait supprimer l'espace de fin. Cependant, cela ne supprime pas le ** newline ** après la dernière URL. Pourriez-vous peut-être donner un exemple? –
Votre code contient ces deux lignes: '-o 'end = 2' -n | \ 'et' sed '$ {/^$/d;}' \ '. Les deux contiennent un espace après le \. Supprimez ces espaces. – Cyrus