清除脏文件的最佳方法是什么?

时间:2020-08-26 10:26:47

标签: regex xml shell sed

我拿了一个非常脏的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,所以我可以在所有行上添加注释。

3 个答案:

答案 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>&#xA;</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