XMLStarlet удалить последний -n (новая строка) с помощью 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"

Что я хочу сделать, это удалить последний перевод строки, созданный xmlstarlet в -o 'end=2' -n | \, Когда он достигает конца, если список ссылок он все еще производит -n (новая строка), как будто это, где продолжать добавлять больше ссылок, но на самом деле я хочу, чтобы избежать последнего -n экземпляр соответствует последнему href,

мой sed '${/^$/d;}' \ что должно сделать это возвращает следующую ошибку:

sed: ${/^$/d;}: No such file or directory
sed:  : No such file or directory

Это как-то не пускает в трубу предыдущее STDOUT к sedSTDIN правильно. В одном из моих предыдущих вопросов я работал с чем-то похожим, и это sed У меня команда работала раньше:

sed 's/\\&amp;/\&/g'

С другой стороны, я также попытался использовать:

# The -e flag
sed -e '${/^$/d;}'

Который не работал для меня тоже.

Может ли это быть сделано непосредственно из XMLStarlet без добавления дополнительных sed труба?

Что не так с моим sed? Что правильно sed метод?

1 ответ

Решение

Размещение этого в конце сценария сработало для меня:

printf "%s" "$(</results.txt)" > results.txt

Я искал сделать это непосредственно в XMLStarlet, поэтому это предварительный ответ.

Другие вопросы по тегам