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
к sed
STDIN
правильно. В одном из моих предыдущих вопросов я работал с чем-то похожим, и это sed
У меня команда работала раньше:
sed 's/\\&/\&/g'
С другой стороны, я также попытался использовать:
# The -e flag
sed -e '${/^$/d;}'
Который не работал для меня тоже.
Может ли это быть сделано непосредственно из XMLStarlet без добавления дополнительных sed
труба?
Что не так с моим sed
? Что правильно sed
метод?
1 ответ
Размещение этого в конце сценария сработало для меня:
printf "%s" "$(</results.txt)" > results.txt
Я искал сделать это непосредственно в XMLStarlet, поэтому это предварительный ответ.