我有一个特定的问题,我想删除2个字符串之间的一行,但这些字符串也出现在要处理的文件的其他部分。
例如,我有以下文件:
<table><tr><td>
<a name="tex2html559" href="node4.html">
<img width="37" height="24" align="BOTTOM" border="0" alt="next" src="next.gif"></a>
</td>
<td>
<a name="tex2html555" href="node2.html">
<img width="26" height="24" align="BOTTOM" border="0" alt="up" src="up.gif"></a>
</td>
<td>
<a name="tex2html549" href="node2.html">
<img width="63" height="24" align="BOTTOM" border="0" alt="previous" src="prev.gif"></a>
</td>
<td>
<a name="tex2html557" href="node1.html">
<img width="65" height="24" align="BOTTOM" border="0" alt="contents" src="contents.gif"></a>
</td>
</tr></table>
<br>
<table><tr><td><b> suivant:</b> <a name="tex2html560" href="node4.html">Généralisation de la notion</a></td><td>
<b> monter:</b> <a name="tex2html556" href="node2.html">Les vecteurs</a>
</td><td>
<b> précédent:</b> <a name="tex2html550" href="node2.html">Les vecteurs</a>
<b> <a name="tex2html558" href="node1.html">Table des matières</a></b> </td>
</tr>
</table>
<img width="629" height="54" border="0" src="img34.gif" alt="\begin{displaymath}\begin{array}[b]{lclr}
{A^{i}_{}}_{j}\,x^{i}\,y^{j}
&=&{A^{1}...
...}_{2}\,x^{2}\,y^{2}
&(\text{sommation sur $j$}) \\
\end{array}\end{displaymath}">
</div><p></p>
<table><tr><td>
<a name="tex2html559" href="node4.html">
<img width="37" height="24" align="BOTTOM" border="0" alt="next" src="next.gif"></a>
</td>
<td>
<a name="tex2html555" href="node2.html">
<img width="26" height="24" align="BOTTOM" border="0" alt="up" src="up.gif"></a>
</td>
<td>
<a name="tex2html549" href="node2.html">
<img width="63" height="24" align="BOTTOM" border="0" alt="previous" src="prev.gif"></a>
</td>
<td>
<a name="tex2html557" href="node1.html">
<img width="65" height="24" align="BOTTOM" border="0" alt="contents" src="contents.gif"></a>
</td>
</tr></table>
<br>
<table><tr><td><b> suivant:</b> <a name="tex2html560" href="node4.html">Généralisation de la notion</a></td><td>
<b> monter:</b> <a name="tex2html556" href="node2.html">Les vecteurs</a>
</td><td>
<b> précédent:</b> <a name="tex2html550" href="node2.html">Les vecteurs</a>
<b> <a name="tex2html558" href="node1.html">Table des matières</a></b> </td>
</tr>
</table>
我想只删除块:
<img width="629" height="54" border="0" src="img34.gif" alt="\begin{displaymath}\begin{array}[b]{lclr}
{A^{i}_{}}_{j}\,x^{i}\,y^{j}
&=&{A^{1}...
...}_{2}\,x^{2}\,y^{2}
&(\text{sommation sur $j$}) \\
\end{array}\end{displaymath}">
</div><p></p>
我试着这样做:
sed '/<img.*/, /<\/div><p><\/p>/d'
我得到了输出:
<table><tr><td>
<a name="tex2html559" href="node4.html">
<table><tr><td>
<a name="tex2html559" href="node4.html">
似乎sed
考虑了其他<img
标记,并从这些标记中删除了所有标记。
如何指出要移除的上面最短的块?
ps:我有多个像这样的HTML文件(此块的大小不同),所以我希望像sed
或awk
一样进行自动处理。
由于
答案 0 :(得分:1)
我会做这样的事情:
sed -n -e '/^$/b a' -e 'H;$ b a' -e 'b' -e :a -e 'x;/<\/div><p><\/p>/!p'
修改强>
这部分:
-e '/^$/b a'
表示“如果该行为空,请跳至 a ”。
此:
-e 'H;$ b a'
表示“将行添加到保留空间,然后如果这是最后一行,请跳转到 a ”。
此:
-e 'b'
表示“跳到脚本的末尾(即结束,不再在此行上工作,在下一行重新开始)”。
此:
-e :a -e 'x;/<\/div><p><\/p>/!p'
表示“这里是 a 。交换模式空间和保留空间的内容(即检索我们收集的所有内容),如果它不包含<div><p></p>
,则打印出来(否则 - 如果 包含<div><p></p>
,则不要打印它)“。
答案 1 :(得分:0)
从你的sed命令,为什么你不能提到宽度大小。
sed '/<img width="629"/, /<\/div><p><\/p>/d'