sed匹配多行,但仅在看到某行之后

sed匹配多行,但仅在看到某行之后,sed,Sed,我试图用sed做一些非常简单的rss解析。比如为了收听最新的新闻而删除附件URL。 例如: 如果您需要在命令行中解析一个简单的XML(比如RSS提要),为什么不试试xsltproc 它接受xml输入,并可以应用xslt转换样式表。 您必须学习xslt语言,但可以产生更好的输出。如果您坚持使用sed,请尝试这一行。这一行适用于给定的示例: kent$ sed -nr '/<item>/,/<\/item>/p' yourFile|sed -nr '/<title&g

我试图用sed做一些非常简单的rss解析。比如为了收听最新的新闻而删除附件URL。 例如:


如果您需要在命令行中解析一个简单的XML(比如RSS提要),为什么不试试xsltproc

它接受xml输入,并可以应用xslt转换样式表。
您必须学习xslt语言,但可以产生更好的输出。

如果您坚持使用sed,请尝试这一行。这一行适用于给定的示例:

kent$  sed -nr '/<item>/,/<\/item>/p' yourFile|sed -nr '/<title>/{s#[ ]*<[/]?title>##g;p}; /<enclosure/{ s#.*url="(.*)">#\1#g;p}'
kent$sed-nr'//,//p'yourFile | sed-nr'//{s#[]*##g;p}/#\1#g;p} "
测试

kent$  cat t
foo
bar
baz
<title>fum</title>
baz
fie
<item>
  <title>1</title>
  <enclosure url="one.mp3">
</item>
<item>
  <title>2</title>
  <enclosure url="two.mp3">
</item>

kent$  sed -nr '/<item>/,/<\/item>/p' t |sed -nr '/<title>/{s#[ ]*<[/]?title>##g;p}; /<enclosure/{ s#.*url="(.*)">#\1#g;p}'
1
one.mp3
2
two.mp3
kent$cat t
福
酒吧
巴兹
烟
巴兹
五
1.
2.
肯特$sed-nr'//,//p't | sed-nr'//{s#[]*.#g;p}/#\1#g;p} "
1.
1.mp3
2.
2.mp3
其中s.sed是:

/<item>/,/<\/item>/{
    s/^.*>\([^<]\+\).*$/\1/
    s/^.*"\(.*\)".*$/\1/
    />$/d
    p
}
///{
s/^.*>\([^$/d
P
}

这可能适合您:

sed '$!N;s/^\s*<title>\(.*\)<\/title>\n\s*<enclosure url="\([^"]*\)">/\1\n\2/p;D' file
1
one.mp3
2
two.mp3

sed'$!N;s/^\s*\(.*\)\n\s*我宁愿在匹配完成后才学习如何匹配/替换sed。过去我使用过awk和sed的组合。但我认为sed应该足够了。这是我发现自己想要为不同类型的文件做的事情,不仅仅是xml。感谢Kent,我一直在尝试组合,但两个sed是可以的氖。
kent$  cat t
foo
bar
baz
<title>fum</title>
baz
fie
<item>
  <title>1</title>
  <enclosure url="one.mp3">
</item>
<item>
  <title>2</title>
  <enclosure url="two.mp3">
</item>

kent$  sed -nr '/<item>/,/<\/item>/p' t |sed -nr '/<title>/{s#[ ]*<[/]?title>##g;p}; /<enclosure/{ s#.*url="(.*)">#\1#g;p}'
1
one.mp3
2
two.mp3
$ sed -n -f s.sed input
1
one.mp3
2
two.mp3
/<item>/,/<\/item>/{
    s/^.*>\([^<]\+\).*$/\1/
    s/^.*"\(.*\)".*$/\1/
    />$/d
    p
}
sed '$!N;s/^\s*<title>\(.*\)<\/title>\n\s*<enclosure url="\([^"]*\)">/\1\n\2/p;D' file
1
one.mp3
2
two.mp3