gpt4 book ai didi

bash - 如何删除匹配行前后的 1 行,以及匹配行本身?

转载 作者:行者123 更新时间:2023-12-01 23:44:06 25 4
gpt4 key购买 nike

我有这个文件:

root@DESKTOP-PDVDCNC:/var/tmp# cat test.txt
monitoring:
email: ''
enabled: true
full_name: Kibana Application server
metadata: {}
roles: [ReadAllIndices]
username: monitoring
nagios:
email: null
enabled: true
full_name: Nagios Monitoring
metadata: {}
roles: [read_only]
username: nagios
monitor_stream_user:
email: null
enabled: true
full_name: null
metadata: {_reserved: true}
roles: [monitor_stream_collector, monitor_stream_agent]
username: monitor_stream_user
H4410603:
email: null
enabled: true
full_name: "John Doe"
metadata: {}
roles: [group1, group2, app_food, group3, group4, group5, application_memory]
username: H4410607
Q6655060:
email: jules_sayzan@carrefour.com
enabled: true
full_name: "Jules"
metadata: {}
roles: [group1, group2, app_food, group3, group5, application_memory]
username: Q6655060
A1090501:
email: ''
enabled: true
full_name: "Ruth Beneth"
metadata: {}
roles: [application_memory]
username: A1090507

我想删除匹配行前后的 1 行,以及匹配行本身。

匹配的行是:每一行包含:“group3”字符串。

我已经尝试过了,但没有成功:

root@DESKTOP-PDVDCNC:/var/tmp# cat test.txt |sed -zE 's/([^\n]*\n){1}([^\n]*group3[^\n]*)(\n[^\n]*){1}/\2/g'

最佳答案

另一个 awk 读取文件一次。

awk  ' { 
if($0~/group3/) { getline; getline; }
else { if(NR>1) print b }
b=$0
}
END { print b } ' group3.txt

读第二行时打印第一行。 getline 将读取下一行。 b=$0 存储先验值。

关于bash - 如何删除匹配行前后的 1 行,以及匹配行本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64536522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com