<p>你的sed命令看起来没那么糟糕,只是留下了很多空白。在</p>
<p>由于sed通常是贪婪的,所以可以用“*”指定任意数量的空间。在</p>
<pre><code>cat bad.xml | sed '/<essid cloaked="\(true\|false"\)>*.*<\/essid>/ s/ *\(&#x\|0;\) *//g'
</code></pre>
<p>另一方面,如果有一些有效的文本,您可能不想将其粘在一起,因此可以为每个删除的模式添加一个空格:</p>
^{pr2}$
<p>最后,您可以将多个空间压缩为一个:</p>
<pre><code>cat bad.xml | sed '/<essid cloaked="\(true\|false"\)>*.*<\/essid>/{s/ *\(&#x\|0;\) */ /g;s/ */ /g}'
</code></pre>
<p>注意,构造{foo;bar}将这两个命令绑定到一个命令块,只在before-grabbed模式上操作。否则会影响整个文件。</p>
<p>加上另一对屏蔽括号和一个屏蔽的加号:</p>
<pre><code>cat bad.xml | sed '/<essid cloaked="\(true\|false"\)>*.*<\/essid>/{s/\( *\(&#x\|0;\) *\)\+/ missing essid /g;s/ */ /g}'
</code></pre>
<p>你可以用一件事来代替一个模式的重复出现。在</p>
<pre><code> s/\( *\(&#x\|0;\) *\)\+/ missing essid /;
^ ( (pattern1) )+ / replacement /(g now obsolete
(pattern .......2)
</code></pre>
<p>内部模式是另一种选择&;x或0;。
外部图案是内部图案,可以选择用类似于</p>
<pre><code> "0;"
"0; "
" 0; "
" 0;"
" 0; "
" &#x"
</code></pre>
<p>等等。在</p>
<p>你想要内部模式,我们称之为X,重复一次或多次,因此是+。但是如果没有parens,+只处理最后一个字符,而不是整个模式。在</p>
<p>你必须学习这种regex语言。找一个教程。你不能要求你生活中需要的每一种可能的变化。在</p>
<p>拥有良好的、基本的理解会很快得到回报。你不需要通过炉灶知道一切,但基本的东西和应该有一个好的估计,什么是可能的和什么不可能。那么回购,就是为了找东西,很少用。然后你可能只问那些难的/复杂的东西。在</p>