每次在文件中出现两个模式时,将文本附加到它们之间的行

每次在文件中出现两个模式时,将文本附加到它们之间的行

我想,这将是一个相当困难的问题。

我必须对提取到 html 文件中的内联文档进行修改,以便将其用作在线文档,但这些文件部分
在内联形式中应该没有 html 标签,而只在提取的 html 文件中有。但是,由于这些文档部分也被提取到 .wiki 文件中,因此一些标签已经存在,就像这样。

this is some text describing what is done
<code>
here are 
some line that will be shown as code in wiki 
but not on html cause they are shown on one line
in html output
</code>

some more describing text
<code>
another piece of code 
that shows up as multiple lines in the wiki
but not in htmls
</code>

通过 sed 可以轻松提取文档的这些部分后,我希望将提取的文件 sed 为以下内容:

this is some text describing what is done
<code><br/>
here are <br/>
some line that will be shown as code in wiki <br/>
but not on html cause they are shown on one line<br/>
in html output<br/>
</code><br/>

some more describing text
<code><br/>
another piece of code <br/>
that shows up as multiple lines in the wiki<br/>
but not in htmls<br/>
</code><br/>

到目前为止我得到的是这一行:

sed -i '/\<code>/,/\<\/code>/{s/$/\<br\/>/}' file

但它也会将 html 标签附加到代码区域之间的文本,如下所示:

this is some text describing what is done
<code><br/>
here are <br/>
some line that will be shown as code in wiki <br/>
but not on html cause they are shown on one line<br/>
in html output<br/>
</code><br/>
<br/>
some more describing text<br/>
<code><br/>
another piece of code <br/>
that shows up as multiple lines in the wiki<br/>
but not in htmls<br/>
</code><br/>

这基本上是正确的,因为 sed 会附加到第一个and the last标签之间的所有行,但这不是我想要的。

有人可以提示我一下我这里遗漏了什么吗?

答案1

\<您的反斜杠不正确。表达式不是匹配文字左断言 - 未转义的<匹配本身就可以,但是使用反斜杠,您会将其更改为左字边界零宽度断言,这永远不会发生在斜杠旁边;所以表达式\</code>永远无法匹配任何东西。

通过一些小的重构来修复其他多余的过度纠正,固定sed脚本是

sed -i '/<code>/,\%</code>%s:$:<br/>:' file

我擅自将斜线改为其他符号,以进一步消除对反斜线的需要。

演示:http://ideone.com/feVWgO

答案2

OK,找到解决办法了,虽然不是用sed,而是用awk

awk '
  BEGIN{c=0} // initialize variable with zero
  /\<code>/{c=1} // if start pattern found set variable to 1
  {if (c==1) print $0,"<br/>"} // if variable is one, append tag
  {if (c==0) print $0} // if variable is zero just print line
  /\<\/code>/{c=0} //if endpattern is found set variable to zero
  '

这实际上非常简单但优雅。

相关内容