2013-03-15 2 views
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' 

, но это не работает, кто-то есть идея/решение для этого?

ответ

1

Один из способов:

sed -r 's|.*/(.*)</.*|\1|' file 
+1

это работа, спасибо большое :) – dasPaul

1

, когда я хочу экстракт вещи, grep приходит первым.

попробовать эту строку:

grep -Po "(?<=/)[^/]*(?=<)" file 
+0

это работает, спасибо ты тоже очень :) – dasPaul

0

Когда это XML, сделать это немного первых, чтобы избежать ошибок:

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

Это гарантирует, что Вы получаете содержание текста, строка за строкой. lxprintf является частью инструментария LTxml2 от http://www.ltg.ed.ac.uk/software/ltxml2. Затем awk предоставляет вам последний токен с разделителем косой черты.

Если вам нужно вставить это в рабочем процессе производства, где обычные утилиты являются менее легко acessible или приемлемо использовать XSLT2:

<xsl:template match="location"> 
    <xsl:value-of select="tokenize(.,'/')[position()=last()]"/> 
    <xsl:text>&#xa;</xsl:text> 
</xsl:template>