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

BASH-如何使用sed删除包含模式字符串第二次出现的行,bash,sed,Bash,Sed,考虑下面的配置文件,它有两个alt\u name实例。在这里,我想删除第二次出现模式alt\u names的行 . . [ server ] subjectAltName = @alt_names . . [ alt_names ] 我尝试了sed命令,但它删除了模式出现的所有行。我使用下面的命令这样做 #sed '/alt_names/{2,$d}' inputfile 下面将删除包含alt\u名称的第二行。计数器c将随着模式匹配的每一行而增加 awk '/alt_names/{c++;

考虑下面的配置文件,它有两个
alt\u name
实例。在这里,我想删除第二次出现模式
alt\u names
的行

.
.
[ server ]
subjectAltName = @alt_names
.
.

[ alt_names ]
我尝试了
sed
命令,但它删除了模式出现的所有行。我使用下面的命令这样做

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

下面将删除包含
alt\u名称的第二行。计数器
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

如何修改文件本身并保存。在Answer中检查更新我看到了,我们仍然需要在这里使用临时文件。我认为应该有类似于
sed
的东西,比如
sed-I文件名
检查由Inian标记的DUP,它包含一些更好的替代品。