如何使用bash脚本从文件中删除特定部分

时间:2017-09-16 18:32:30

标签: bash scripting

我有一个文件abc.txt,我想从bash脚本中删除文件中的特定部分。

#######################Media######################
[Media]
       comment = Media Files
       path = /share22
       browseable = yes
       read only = yes
       guest only = no
#######################end#######################
#######################Add#######################
[Add]
       comment = Media Files
       path = /share33
       browseable = yes
       read only = yes
       guest only = no
#######################end#######################
#######################Added#####################
[Added]
       comment = Media Files
       path = /share44
       browseable = yes
       read only = yes
       guest only = no
#######################end#######################

并从文件中删除以下部分

#######################Add#######################
[Add]
       comment = Media Files
       path = /share33
       browseable = yes
       read only = yes
       guest only = no
#######################end#######################

如何删除第一部分,第二部分或最后部分?

请帮帮我!

2 个答案:

答案 0 :(得分:0)

Awk最适合此类文本文件处理,您可以在下面使用

awk '/^[#]+(Add)[#]+/{f=1}f && /^[#]+(end)[#]+/{f=0; next}!f' file

# OR combined one

awk '/^[#]+(Add|end)[#]+/{if(f){f=0; next}if(/^[#]+(Add)[#]+/)f=1}!f' file 

测试结果:

输入

$ cat file
#######################Media######################
[Media]
       comment = Media Files
       path = /share22
       browseable = yes
       read only = yes
       guest only = no
#######################end#######################
#######################Add#######################
[Add]
       comment = Media Files
       path = /share33
       browseable = yes
       read only = yes
       guest only = no
#######################end#######################
#######################Added#####################
[Added]
       comment = Media Files
       path = /share44
       browseable = yes
       read only = yes
       guest only = no
#######################end#######################

输出 - 1:

$ awk '/^[#]+(Add)[#]+/{f=1}f && /^[#]+(end)[#]+/{f=0; next}!f' file
#######################Media######################
[Media]
       comment = Media Files
       path = /share22
       browseable = yes
       read only = yes
       guest only = no
#######################end#######################
#######################Added#####################
[Added]
       comment = Media Files
       path = /share44
       browseable = yes
       read only = yes
       guest only = no
#######################end#######################

输出 - 2:

$ awk '/^[#]+(Add|end)[#]+/{if(f){f=0; next}if(/^[#]+(Add)[#]+/)f=1}!f' file
#######################Media######################
[Media]
       comment = Media Files
       path = /share22
       browseable = yes
       read only = yes
       guest only = no
#######################end#######################
#######################Added#####################
[Added]
       comment = Media Files
       path = /share44
       browseable = yes
       read only = yes
       guest only = no
#######################end#######################

答案 1 :(得分:0)

给定的输入适用于简单的解决方案:

awk '/##Add##/,/##end##/ {next};1'  abc.txt

sed '/##Add##/,/##end##/d' abc.txt