Sed命令搜索一行并取消注释以下行

时间:2016-05-12 18:02:13

标签: linux sed

我正在寻找一个sed命令来编辑Arch Linux镜像文件。此命令应搜索注释的国家/地区名称,例如 #Germany ,并取消注释以下八个 注释行。

感谢任何帮助。

示例:

之前:

#Germany
#hostA
#hostB
...
#hostH
#hostI
...
#hostZ

后:

#Germany
hostA
hostB
...
hostH
#hostI
...
#hostZ

2 个答案:

答案 0 :(得分:3)

使用GNU sed,您可以执行类似

的操作
gsed  '/#Germany/,+4{/#Germany/ n; s/^#//}'

示例

$ cat test
Some
random
stuff

#Germany
#1
#2
#3
#4

$ gsed  '/#Germany/,+4{/#Germany/ n; s/^#//}' test
Some
random
stuff

#Germany
1
2
3
4

它的作用

  • '/#Germany/,+4这是一种地址模式。它匹配后面的第一个#Germany和4行。如果匹配,则执行此模式的命令

  • /#Germany/ n;如果是国家/地区名称,我们可能无法替换它。 n代表下一个,它读取缓冲区的下一行。

  • s/^#//一无所获取代#

答案 1 :(得分:2)

awk

中类似
$ awk 'c&&c--{sub(/^#/,"")} /#Germany/{c=8} 1' file