我想,这将是一个相当困难的问题。
我必须对提取到 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
我擅自将斜线改为其他符号,以进一步消除对反斜线的需要。
答案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
'
这实际上非常简单但优雅。