compute_hosts:
compute1:
ip: 12.12.12.12
compute2:
ip: 13.13.13.13
# compute3:
# ip: 14.13.12.12
# compute4:
# ip: 12.23.34.45
metering-compute_hosts:
compute1:
ip: 31.13.13.23
compute2:
ip: 57.67.575.45
# compute3:
# ip: 32.322.4.35
# compute4:
# ip: 23.435.67.7
SED命令删除具有计算4及其IP的行。 IP必须使用模式进行搜索 预期输出:
compute_hosts:
compute1:
ip: 12.12.12.12
compute2:
ip: 13.13.13.13
# compute3:
# ip: 14.13.12.12
metering-compute_hosts:
compute1:
ip: 31.13.13.23
compute2:
ip: 57.67.575.45
# compute3:
# ip: 32.322.4.35
计算4及其IP应该在输出中删除
答案 0 :(得分:2)
此sed会删除带模式的行和之后的一行:
sed '/compute4/,+1d'
测试:
$ sed '/compute4/,+1d' compute
compute_hosts:
compute1:
ip: 12.12.12.12
compute2:
ip: 13.13.13.13
# compute3:
# ip: 14.13.12.12
metering-compute_hosts:
compute1:
ip: 31.13.13.23
compute2:
ip: 57.67.575.45
# compute3:
# ip: 32.322.4.35
答案 1 :(得分:2)
sed -re '/compute4/ {N;/\s+ip:/d}'
尝试一下。
N
连接模式空间中的下一个输入行
测试:
$ cat compute | sed -re '/compute4/ {N;/\s+ip:/d}'
compute_hosts:
compute1:
ip: 12.12.12.12
compute2:
ip: 13.13.13.13
# compute3:
# ip: 14.13.12.12
metering-compute_hosts:
compute1:
ip: 31.13.13.23
compute2:
ip: 57.67.575.45
# compute3:
# ip: 32.322.4.35
答案 2 :(得分:0)
编辑: :由于OP告诉字符串computer4
的下一行可能没有IP,因此请使用此匹配功能首先在行中对其进行匹配。
awk '/compute4/{flag=1;next} flag && match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/){flag="";next} 1' Input_file
考虑到您的Input_file与所示示例相同,请尝试以下操作(如果您对awk
感到满意)。
awk '/compute4/{getline;next} 1' Input_file
答案 3 :(得分:0)
使用awk可以正常工作:
awk --posix '/compute4/,/[0-9]{1,3}(\.[0-9]{1,3}){3}/{next}{print}' input_file
/pattern1/,/pattern2/
继续从与/pattern1/
匹配的行返回 true ,直到与/pattern2/
匹配的行。{next}
就可以了。