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}'

これにより、テキスト コンテンツを 1 行ずつ確実に取得できます。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 に答える