我正在尝试使用sed删除一对匹配模式中的块。给出一个块:
<span
class="fxlbc-t1-x-x-172">M<span
class="small-caps">A</span><span
class="small-caps">R</span><span
class="small-caps">S</span></span>
<span
class="fxlbc-t1-x-x-248">R<span
class="small-caps">A</span><span
class="small-caps">I</span><span
class="small-caps">S</span><span
class="small-caps">O</span><span
class="small-caps">N</span></span>
我需要删除该块:
<span
class="fxlbc-t1-x-x-172">M<span
class="small-caps">A</span><span
class="small-caps">R</span><span
class="small-caps">S</span></span>
我正试着在sed中这样做。我在使用N
选择器时遇到的第一个问题是奇数与偶数行的问题。我通过这样做解决了这个问题:
sed -i 'N
/.*<span \nclass="fxlbc-t1-x-x-172".*/,/.*class="fxlbc-t1-x-x-248".*/ {
/.*fxlbc-t1-x-x-172.*/d
}' test.html
# Add an empty line
sed -i '1i\ ' test.html
sed -i 'N
/.*<span \nclass="fxlbc-t1-x-x-172".*/,/.*class="fxlbc-t1-x-x-248".*/ {
/.*fxlbc-t1-x-x-172.*/d,
/.*
}' test.html
我很确定必须有一种更简单的方法,然后我就不知道如何正确删除块的其他行(不删除fxlbc-t1-x-x-248
span
行)。有什么想法吗?
答案 0 :(得分:1)
同事给了我问题的答案:
sed -i ':a ; $! { N ; ba } ; $s/\(<span\( \|\n\|\t\)\+class="fxlbc-t1-x-x-172">[^4]\+\)\(<span\( \|\n\|\t\)\+class="fxlbc-t1-x-x-248">\)/\3/g' test.html
它将整个文件放在缓冲区中,然后执行标准搜索并替换缓冲的字符串。我认为它非常难看,但它确实可以解决问题。