我使用下面的 sed 脚本来删除一些与 匹配的内容 block
“自由绑定(bind)状态;”
字符串,但问题是在某些 block 中我有字符串
“下一个绑定(bind)状态空闲”
下面的命令将其视为匹配项并将其删除,我也不想删除“下一个绑定(bind)状态空闲” block ,请建议。
并从输入文件中删除“无绑定(bind)状态” block 。
sed -e '/lease/!b;:a;/}/!{$!{N;ba}};{/\<binding state free;\>/d}' file.txt
我正在使用这个命令,但它也删除了“下一个绑定(bind)状态空闲”
block 数据 sed 将其视为匹配项,因为它还包含“绑定(bind)状态自由;”字符串。
lease {
*****some text******
binding state free;
*****some text******
*****some text******
}
lease {
*****some text******
*****some text******
binding state free;
*****some text******
*****some text******
}
lease {
*****some text******
*****some text******
binding state active;
next binding state free;
rewind binding state free;
*****some text******
*****some text******
}
lease {
*****some text******
*****some text******
binding state active;
next binding state free;
rewind binding state free;
*****some text******
*****some text******
}
期望的输出:-
lease {
*****some text******
*****some text******
binding state active;
next binding state free;
rewind binding state free;
*****some text******
*****some text******
}
lease {
*****some text******
*****some text******
binding state active;
next binding state free;
rewind binding state free;
*****some text******
*****some text******
}
最佳答案
这可能对你有用(GNU sed):
sed -n '/lease {/{:a;N;/}/!ba;/^\s*binding state free;\s*$/M!p}' file
使用类似于 grep 的选项 -n
仅打印所需的内容。收集 lease {
之间并以 }
结尾的行。如果集合中的任何一行包含绑定(bind)状态自由
并且没有其他内容,则不要打印该集合。
注意使用 M
多行标志来定制正则表达式。
关于linux - sed 字符串大小写与 "\<>"的匹配问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49447741/