我有配置文件,我希望匹配特定的行,如"server.port = 5480".保留匹配的第一个删除休息匹配行.例
server.port=5480
server.port=5480
server.port=5480
ssl.engine = "enable"
ssl.use-sslv2 = "disable"
ssl.use-sslv3 = "disable"
ssl.cipher-list = "FIPS':' +3DES':'!aNULL"
ssl.engine = "enable"
ssl.use-sslv2 = "disable"
server.port=5480
server.port=5480
server.port=5480
server.port=5480
Run Code Online (Sandbox Code Playgroud)
期望的输出只有一行
server.port=5480
ssl.engine = "enable"
ssl.use-sslv2 = "disable"
ssl.use-sslv3 = "disable"
ssl.cipher-list = "FIPS':' +3DES':'!aNULL"
ssl.engine = "enable"
ssl.use-sslv2 = "disable"
Run Code Online (Sandbox Code Playgroud)
使用sed我想要这个和另外一个这不是序列行可能是变体
让我们使用awk并打印所有那些不包含server.port或第一次出现的行:
$ awk '!(/server.port/ && c++)' file
server.port=5480
ssl.engine = "enable"
ssl.use-sslv2 = "disable"
ssl.use-sslv3 = "disable"
ssl.cipher-list = "FIPS':' +3DES':'!aNULL"
ssl.engine = "enable"
ssl.use-sslv2 = "disable"
Run Code Online (Sandbox Code Playgroud)
注意我使用这种方法,因为我看到其他行不止一次出现.
awk中的真实条件会触发打印整行.所以,如果你说awk '1' file,将打印所有文件.
我们在这里做的是相反的:在某些情况下限制打印.这些情况server.port发生在第2次,第3次......时间.
由于/server.port/匹配了"server.port"中的行,我们还检查变量c是否为正.
当它被设置为我们第一次!(True && 0++)是!(True && False)→交通!(False)→交通True.
在案件的其余部分,它!(True && positive++)是!(True && True)→交通!(True)→交通False,所以没有打印被触发.