我拿了一个非常脏的xml文件来研究sed。看这里:
.has()
我设法删除了垃圾,只保留了文字。但是,该解决方案并不能令我非常满意。我想要一种改善方法,但是我真的不知道如何。这是代码:
<title><![CDATA[O BR-Linux está em pausa por tempo indeterminado]]></title>
<title><![CDATA[Funçoes ZZ atinge maioridade: versão 18.3]]></title>
<title><![CDATA[CloudFlare 1.1.1.1 e parceria com Firefox DoH]]></title>
<title><![CDATA[Slint, Distro Baseada no Slackware e Acessível]]></title>
<title><![CDATA[Utilização de CPU em sistemas Linux multi-thread]]></title>
<title><![CDATA[Realidade Aumentada com 10 anos de idade e 10 linhas de código.]]></title>
为了避免混淆,我使用了sed,所以我可以在所有行上添加注释。
答案 0 :(得分:3)
使用xmlstarlet
:
URL='http://br-linux.org/feed/'
lynx -source "$URL" | xmlstarlet select --template --value-of '//item/title'
输出:
O BR-Linux está em pausa por tempo indeterminado Funçoes ZZ atinge maioridade: versão 18.3 CloudFlare 1.1.1.1 e parceria com Firefox DoH Slint, Distro Baseada no Slackware e Acessível Utilização de CPU em sistemas Linux multi-thread Realidade Aumentada com 10 anos de idade e 10 linhas de código. Nova versão da plataforma livre para o mapeamento de iniciativas em agroecologia Instalação do WordPress com Vagrant DatabaseCast 82: Ciência e dados Aplicando ferramentas open source para se dar bem no jogo Suikoden Tierkreis Tchelinux 2018: Chamada de palestras para Rio Grande Palestra on-line - conhecendo o Elastic Stack Curso gratuito básico de linux - Online e ao-vivo Aulas Particulares de Programação em Shell Script Protoboard em quadrinhos: manual apresenta 10 circuitos divertidos e desafiadores que você mesmo pode construir
答案 1 :(得分:2)
处理XML文件的最佳方法是使用支持XML的工具,而不是正则表达式。
使用XSLT仅提取标题的示例:
feed.xslt:
<?ml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:for-each select="rss/channel/item">
<xsl:value-of select="title"/><xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
应用于RSS提要时:
$ xsltproc feed.xslt <(curl -s https://br-linux.org/feed/)
O BR-Linux está em pausa por tempo indeterminado
Funçoes ZZ atinge maioridade: versão 18.3
CloudFlare 1.1.1.1 e parceria com Firefox DoH
Slint, Distro Baseada no Slackware e Acessível
Utilização de CPU em sistemas Linux multi-thread
Realidade Aumentada com 10 anos de idade e 10 linhas de código.
Nova versão da plataforma livre para o mapeamento de iniciativas em agroecologia
Instalação do WordPress com Vagrant
DatabaseCast 82: Ciência e dados
Aplicando ferramentas open source para se dar bem no jogo Suikoden Tierkreis
Tchelinux 2018: Chamada de palestras para Rio Grande
Palestra on-line - conhecendo o Elastic Stack
Curso gratuito básico de linux - Online e ao-vivo
Aulas Particulares de Programação em Shell Script
Protoboard em quadrinhos: manual apresenta 10 circuitos divertidos e desafiadores que você mesmo pode construir
答案 2 :(得分:1)
您可以逐步“解开”内容,而不必将结尾与开头分开:
$ lynx -source "$URL" |
sed 's/<title>\(.*\)<\/title>/\1/' | # <title>x</title> -> x
sed 's/<!\[\(.*\)\]>/\1/' | # <![x]> -> x
sed 's/CDATA\[\(.*\)\]/\1/' | # CDATA[x] -> x