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

使用sed获取两个字符串之间的字符串,sed,grep,Sed,Grep,我需要(使用sed或grep)提取两个字符串之间的子字符串 问题是前后的字符串是带有双引号、空格等的html标记 这是我要提取文本的行的示例: 12pt;">TEXT_TO_GET</span></div></message> 12pt;“>要获取的文本 欢迎任何帮助,提前感谢;)表面上,您可以使用sed: sed 's%12pt;">\(.*\)</span></div></message>%\1%' s

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

问题是前后的字符串是带有双引号、空格等的html标记

这是我要提取文本的行的示例:

12pt;">TEXT_TO_GET</span></div></message>
12pt;“>要获取的文本

欢迎任何帮助,提前感谢;)

表面上,您可以使用
sed

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

sed-n'/12pt;“>\(.*\)/s%12pt;”>\(.*\)%\1%p”
第一个打印出的非匹配行不变;第二个只打印匹配的行


然而,这是在寻找一个非常僵化的背景;如果这正是你想要的,那就太好了,但是如果你需要改变事情,事情很快就会变得一团糟。然而,在没有任何变化需要适应的情况下,不可能更可靠地给出一个更灵活的答案。

NOP,SED打印整个行,我只需要在中间打印文本(示例中的TrimthtoToGET),只需要输出就行了。没有变化,我从一个文件中获取一些行,grep它们并获得一些输出,-大部分是html-我需要提取一个子字符串,正如我在第一篇文章中所说的。“之前和之后”的子字符串将始终相同(我放在那里的那些),现在,再次阅读您的帖子,我认为您不理解问题xD;我在第一篇文章中放的不是整行,只是其中的一部分,前面还有很多东西,但这些子字符串只出现一次,总是按那个顺序出现,等等。这两个命令,在输入行时,都会给你
TEXT\u TO\u GET
作为输出。它们之间的区别在于是否存在与模式不匹配的其他线条。然后,第一个命令回显这些其他行(不变),第二个命令不回显它们。这似乎是你在问题和评论中所要求的……你试过我给你的吗?是的,我试过了,并返回了行的所有剩余部分,但别担心,我找到了另一种方法,使用2个sed(sed-n-e's/*12pt;“>///p';sed-n-e's/*///p');无论如何,非常感谢!:)您运行的是哪个平台上的
sed
的哪个版本?我复制并粘贴了答案中的命令,它们在Mac OS X 10.8.4上使用提供的BSD
sed
以及GNU
sed
4.2.2时运行得很好。当然,如果
12pt;
部分之前的行中有垃圾,然后你必须清理它;如果
部分之后有垃圾,那么你必须清理它。但问题没有提到这是一种可能性。小心你的要求;你可能会得到你所说的你想要的,而不是你想要的。
sed -n '/12pt;">\(.*\)<\/span><\/div><\/message>/ s%12pt;">\(.*\)</span></div></message>%\1%p'