#+BEGIN_HTML
some html
more html
#+END_HTML
我有一些文件包含如上所述的文字。我想删除#+ BEGIN_HTML之后的任何空行,所以我最终得到:
#+BEGIN_HTML
some html
more html
#+END_HTML
该文件在其他地方包含空行,我不想删除。我正在努力想出一个让我这样做的正则表达式。
答案 0 :(得分:1)
以下是awk
解决方案:
awk '!NF && f {next} 1; NF {f=0} /#\+BEGIN_HTML/ {f=1}' file
#+BEGIN_HTML
some html
more html
#+END_HTML
或者随着Jidder的消化:
awk '!NF&&f{next}{f=/#\+BEGIN_HTML/}1' file
答案 1 :(得分:1)
使用sed
:
sed ':a;/^#+BEGIN_HTML/{N;/\n./!s/\n.*//;ta}' file
创建标签a
。对于以#+BEGIN_HTML
开头的行,将下一行追加到模式空间。替换从换行到下一行结尾的所有内容,除非它不是空行。如果替换修改了模式空间,则重复循环。
答案 2 :(得分:0)
使用awk
:
awk '/#\+BEGIN_HTML/{print; skip=1; next} skip {if (!NF) next; else skip=0} 1' file
#+BEGIN_HTML
some html
more html
#+END_HTML
答案 3 :(得分:0)
通过perl,
$ perl -0777pe 's/(?<=^#\+BEGIN_HTML\n)\n+//g' file
#+BEGIN_HTML
some html
more html
#+END_HTML
或强>
perl -00pe 's/(?<=^#\+BEGIN_HTML\n)\n+//g' file
答案 4 :(得分:0)
尝试:
sed -e ':1' -e '/#+BEGIN_HTML/{$!N;/\n$/s///;t1}'
答案 5 :(得分:0)
这是另一个使用awk的人:
awk 'f{if(!NF)next;f=0}/#\+BEGIN_HTML/{f=1}1' file
模式匹配时, f
设置为1。当f
为1时,将跳过空行(其中NF
为0)。当行不再为空时,f
设置为0。
测试出来:
$ cat file
#+BEGIN_HTML
some html
more html
#+END_HTML
$ awk 'f{if(!NF)next;f=0}/#\+BEGIN_HTML/{f=1}1' file
#+BEGIN_HTML
some html
more html
#+END_HTML