使用sed获取两个字符串之间的字符串

问题描述:

我需要提取(使用sed或grep)两个字符串之间的子字符串。使用sed获取两个字符串之间的字符串

的问题是,之前和之后的字符串是用双引号,空格等html标签...

这是我想提取的文本行的一个示例:

12pt;">TEXT_TO_GET</span></div></message> 

欢迎任何帮助,在此先感谢;)

从表面上看,你可以使用sed

sed 's%12pt;">\(.*\)</span></div></message>%\1%' 

或:

sed -n '/12pt;">\(.*\)<\/span><\/div><\/message>/ s%12pt;">\(.*\)</span></div></message>%\1%p' 

第一打印出不匹配的行不变;第二只打印出匹配的线。

但是,这是寻找一个非常严格的背景;如果这正是你想要的,那很棒,但是如果你需要改变一些东西,它会很快变得混乱。然而,没有任何迹象表明需要适应哪些变化,不可能更可靠地给出更灵活的答案。

+0

Nop,那个sed打印整行,我只需要打印中间的文本(例子中的TEXT_TO_GET),我需要的输出只是它。没有任何变化,我从文件中获得一些行,grep他们并获得一些输出,其中大部分是html,并且我需要提取一个子字符串,正如我在第一篇文章中所说的那样。 “之前和之后”子字符将永远是相同的(我放在那里的那些) – user2266881

+0

现在,再次阅读您的文章,我thik你不明白问题xD;我在第一篇文章中提到的不是整条线,只是它的一部分,之前有更多的东西,但那些子串只出现一次,总是按照这个顺序等等。 – user2266881

+0

这两个命令,当喂你的时候输入行,给你'TEXT_TO_GET'作为输出。它们之间的区别在于是否有其他线路与模式不匹配。第一条命令然后回显那些其他行(不变),第二条命令不回显它们。这似乎是你在问题和评论中所要求的......你尝试了我给你的东西吗? –