我有一个带有这样注释的html文件(有些可以嵌套(
<!-- Begin foo.html -->
<p>some html code</p>
<!-- Begin foo2.html -->
<p>some html code</p>
<!-- End foo2.html -->
<!-- End foo.html -->
<!-- Begin bar.html -->
<p>some html code</p>
<!-- End bar.html -->
我试图做的是将html文件拆分为foo.html,foo2.html和bar.html。块注释的数量未知。作为块的名称。到目前为止,我有这条尴尬的台词
awk '/<!-- Begin (.*?)-->/ {f=$1} f{print > f} /<!-- End 1 -->/{close f; f=""}' index.html
但它不能正常工作。
关于如何解决此问题的任何想法,或任何有帮助的替代方法?
虽然我对这个问题不太清楚。但是如果您有具体的评论,那么您可以给出一个正则表达式范围。foo2.html部分也将附加到foo.html中。像这样的东西——
awk '
/Begin foo.html/,/End foo.html/{print $0 > "foo.html"}
/Begin bar.html/,/End bar.html/{print $0 > "bar.html"}' index.html
测试:
[jaypal:~/Temp] cat index.html
<!-- Begin foo.html -->
<p>some html code</p>
<!-- Begin foo2.html -->
<p>some html code</p>
<!-- End foo2.html -->
<!-- End foo.html -->
<!-- Begin bar.html -->
<p>some html code</p>
<!-- End bar.html -->
[jaypal:~/Temp] awk '/Begin foo.html/,/End foo.html/{print $0 > "foo.html"}
/Begin bar.html/,/End bar.html/{print $0 > "bar.html"}' index.html
[jaypal:~/Temp] cat foo.html
<!-- Begin foo.html -->
<p>some html code</p>
<!-- Begin foo2.html -->
<p>some html code</p>
<!-- End foo2.html -->
<!-- End foo.html -->
[jaypal:~/Temp] cat bar.html
<!-- Begin bar.html -->
<p>some html code</p>
<!-- End bar.html -->
$ cat input.txt
<!-- Begin foo.html -->
<p>some html code</p>
<!-- Begin foo2.html -->
<p>some html code</p>
<!-- End foo2.html -->
<!-- End foo.html -->
<!-- Begin bar.html -->
<p>some html code</p>
<!-- End bar.html -->
$ awk '/<!-- Begin/{stack[sp++]=$3; print ">>>", $3; next}; /<!-- End/{sp--; print "<<<", $3; next}; {if(sp>0) print > stack[sp-1]}' input.txt
>>> foo.html
>>> foo2.html
<<< foo2.html
<<< foo.html
>>> bar.html
<<< bar.html
$ for i in {foo,foo2,bar}.html; do echo "=====$i======"; cat $i; done
=====foo.html======
<p>some html code</p>
=====foo2.html======
<p>some html code</p>
=====bar.html======
<p>some html code</p>
我添加了debug msg
.删除print ">>>", $3
后,代码要短得多。
$ awk '/<!-- Begin/{stack[sp++]=$3; next}; /<!-- End/{sp--; next}; {if(sp>0) print > stack[sp-1]}' input.txt
最后,您应该重新格式化 html(缩进不正确(!