BASH - 如何使用sed删除包含第二次出现的模式字符串的行

时间:2017-06-13 06:59:33

标签: bash sed

考虑以下配置文件,它有两个alt_names实例。在这里,我想删除第二次出现模式alt_names的行。

.
.
[ server ]
subjectAltName = @alt_names
.
.

[ alt_names ]

我尝试了sed命令,但它删除了所有带有模式匹配的行。我使用以下命令来执行此操作,

#sed '/alt_names/{2,$d}' inputfile

有些人可以了解sed在这里使用的错误。

1 个答案:

答案 0 :(得分:1)

以下将删除包含alt_names的第二行。计数器c将随着每个具有匹配模式的行而增加。

awk '/alt_names/{c++;if(c==2)gsub(/^.*$/,"")}1'
.
[ server ]
subjectAltName = @alt_names
.
.

修改并保存:

awk '/alt_names/{c++;if(c==2)gsub(/^.*$/,"")}1' inputfile >inputfile.tmp && mv inputfile.tmp inputfile