问一个perl删除多行的问题,具体要求如下:
使用perl删除文件中的多行,举例,有一个文件内容如下:
#===== Custom1 =====
[home_test]
path = /home/test
read only = no
comment = backup home directory (requires authentication)
auth users = abc
exclude = test
#===== Custom2 =====
[home_test123]
path = /home/test123
read only = no
comment = backup home directory (requires authentication)
auth users = abc
exclude = test
期望的效果:只删除下面的这一段,保留剩下的行。
#===== Custom1 =====
[home_test]
path = /home/test
read only = no
comment = backup home directory (requires authentication)
auth users = abc
exclude = test
请高手指教,如何实现?
我想到的算法是,找到匹配[home_test]的行,然后记录行号,再依次删除包括该行号及其下面的几行。但我现在可以取到匹配[home_test]的行号,可是不知道怎么将行号再替换成内容,没法做删除动作。
如果真的像上面描述的,Custom 2 这组总是在文件最后,且固定只有 7 行数据,那不然用 sed '/Custom 2/,$d' 来删除好了。
我的需求可能还不是很明确,我在补充一下:
1)文件都是一个段落一个段落的,每段内容,除了开头#===部分和[home_test]部分不同以外,其他内容都相同。这一点就是难以直接使用/.../通过匹配来删除的原因。
2)我只想删除匹配[home_test]开头的那个段落,保留其他的段落,文件中这样的段落会有很多,但[home_test]开头的段落只有一处,是唯一的。
执行结果:
$ awk -f multi-line.awk data
#===== Custom3 =====
[home_test1]
path = /home/test123
read only = no
comment = backup home directory (requires authentication)
auth users = abc
exclude = test
#===== Custom2 =====
[home_test123]
path = /home/test123
read only = no
comment = backup home directory (requires authentication)
auth users = abc
exclude = test