Linux 使用sed提取匹配输出?
我有一个sed命令来提取自由绑定状态;数据块,但这也给出了绑定状态活动块的输出,因为该块中的同一关键字以及next和rewind关键字有任何方法可以匹配绑定状态自由的确切关键字,以便在sed命令中只能得到给定的块Linux 使用sed提取匹配输出?,linux,bash,shell,awk,sed,Linux,Bash,Shell,Awk,Sed,我有一个sed命令来提取自由绑定状态;数据块,但这也给出了绑定状态活动块的输出,因为该块中的同一关键字以及next和rewind关键字有任何方法可以匹配绑定状态自由的确切关键字,以便在sed命令中只能得到给定的块 lease { *****some text****** binding state free; *****some text****** *****some text****** } lease { *****
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******
}
sed -n '/lease/!b;:a;/}/!{$!{N;ba}};{/binding state free;/p}' file.txt
下面的
awk
可能会在同样的情况下帮助您
awk '/}/{if(flag){print value ORS $0};flag=val=value="";next} /lease/{val=1} val && /^ +binding state free;/{flag=1} {value=value?value ORS $0:$0}' Input_file
现在也添加了一个非线性的解决方案
awk '
/}/{
if(flag){print value ORS $0};
flag=val=value="";
next}
/lease/{
val=1}
val && /^ +binding state free;/{
flag=1}
{
value=value?value ORS $0:$0}
' Input_file
输出如下
lease {
*****some text******
binding state free;
*****some text******
*****some text******
}
lease {
*****some text******
*****some text******
binding state free;
*****some text******
*****some text******
}
@Vijay,现在试试,让我知道,那里有打字错误。@Vijay,代码是根据您显示的输入编写的,请看我已经附加了我得到的输出。请进一步解释为什么它不适合您??它的打印过滤绑定状态自由块4次extra@Vijay哪里你看到我的输出了吗?如果您的输入与显示的不同,请告诉我?是的,事实上,我在日志文件中有一个日志文件。这不起作用,仅用于在单个行上进行简单替换(
s/old/new/
),仅此而已。对于其他问题,例如您的问题,您应该使用awk。如果您的问题是提供该示例输入的预期输出,以及您迄今为止所尝试的内容,那么我们可以帮助您。