我有一个文件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#######################
如何删除第一部分,第二部分或最后部分?
请帮帮我!
答案 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