0

我有一些播放列表文件的行,并且只想提取文件名并为每一行打印出来:

<location>file:///mnt/c3/jtvtes/ww/adw.avi</location>
<location>file:///mnt/c2/clown.mp4</location>
<location>file:///mnt/c2/jtv/video/ww/god.mp3</location>

从这些行我只需要:

adw.avi
clown.mp4
god.mp3

所以我尝试提取“/”和“<”字符之间的文本:

sed -r 's/^(.*)pat1(.*)pat2(.*)$/\2/g'

修改为:

sed -r 's/^(.*)/(.*)<(.*)$/\2/g'

但这不起作用,有人对此有想法/解决方案吗?

4

3 回答 3

2

单程:

sed -r 's|.*/(.*)</.*|\1|' file
于 2013-03-15T11:07:00.013 回答
2

当我想提取东西时,grep首先出现。

试试这一行:

grep -Po "(?<=/)[^/]*(?=<)" file
于 2013-03-15T11:07:14.713 回答
0

当它是 XML 时,先做那一点,以避免错误:

lxprintf -e location "%s\n" . yourfilename | awk -F '{print $NF}'

这样可以保证您逐行获取文本内容。lxprintf 是来自http://www.ltg.ed.ac.uk/software/ltxml2的 LTxml2 工具包的一部分。然后 awk 会为您提供最后一个以斜线分隔的标记。

如果您需要将其嵌入到常规实用程序不太容易访问或接受的生产工作流程中,请使用 XSLT2:

<xsl:template match="location">
  <xsl:value-of select="tokenize(.,'/')[position()=last()]"/>
  <xsl:text>&#xa;</xsl:text>
</xsl:template>
于 2014-02-25T21:38:20.177 回答