linux sed如何用文本包装多行搜索模式

时间:2016-01-08 06:41:37

标签: sed

我有一个html文件,其中包含以下部分:

<div id='webnews'>
... variable stuff ...
</div>

我要评论如下:

<!--
<div id='webnews'>
 ... variable stuff ...
</div>
-->

我能找到&amp;打印多行文本如下:

sed '/<div id="webnews"/, /<\/div>/ { p }' filename.html

尝试使用h,d,x和G,我一直无法解决如何使用'<!--' and '-->'包装保持缓冲区或模式缓冲区。

非常感谢您帮助应对这一挑战。

3 个答案:

答案 0 :(得分:1)

Sed不适合这项工作。

使用sift

sift -m '(.+)(<div id=.webnews.>.*</div>)(.+)' --replace '$1<!-- $2 -->$3'

答案 1 :(得分:1)

使用sed快速而肮脏(除非你确定html内容/结构,否则不是html的最佳主意)

sed "/<div id='webnews'/, /<\/div>/ {
  /<div id='webnews'/ { 
     h
     d
     }
  H 
  /<\/div>/ !d
  x
  s/^/<!--\\
/
  s/$/\\
-->/
  }" filename.html

答案 2 :(得分:1)

这可能适合你(GNU sed):

sed -e '/<div id='\''webnews'\''>/,/<\/dev>/!b;/<div id='\''webnews'\''>/i\<!--' -e '/<\/div>/a\-->' file

或者也许:

sed $'/<div id=.webnews.>/,/<\/dev>/{/<div id=.webnews.>/i\<!--\n;/<\/div>/a\-->\n}' file