使用bash复制文件中两个字符串之间的文本

时间:2014-03-15 09:43:33

标签: bash sed

我有一个XML文件。从那以后,我想在两个字符串之间复制文本。

XML文件中的示例行:

some stuff.........<br/><br/><br/>http://example.com/copythislink.php<br/><br/>After you.........some more stuff

我想复制

之间的所有文字
<br/><br/><br/>

<br/><br/>After you

这两个字符串只在xml文件中出现一次。我尝试使用sed。但是,由于<,它会返回错误。

3 个答案:

答案 0 :(得分:2)

您可以使用此sed

sed 's#.*<br/><br/><br/>\(.*\)<br/><br/>After you.*#\1#' yourfile.xml

<强>(OR)

如果您只想提取网址。

sed -n 's#.*<br/><br/><br/>\(.*\)<br/><br/>After you.*#\1#p' yourfile.xml

答案 1 :(得分:2)

使用gnu grep

grep -Po '(?<=<br/><br/><br/>)((?!<br/><br/>After you).)*' file

解释

  • (?<=<br/><br/><br/>)是一个积极的后视断言
  • (?!<br/><br/>After you)是一个负面的后瞻断言

答案 2 :(得分:0)

如果您只需要提取URI,那么简单grep就足够了。例如,像:

grep -o "http:\/\/[A-Za-z0-9\.\/]*" test.xml 

但是,如果您真的想要捕获这两个字符串之间的文本(无论哪种内容,即使它不包含URI),那么sat的解决方案效果很好。