Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用sed提取匹配输出?_Linux_Bash_Shell_Awk_Sed - Fatal编程技术网

Linux 使用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 { *****

我有一个sed命令来提取自由绑定状态;数据块,但这也给出了绑定状态活动块的输出,因为该块中的同一关键字以及next和rewind关键字有任何方法可以匹配绑定状态自由的确切关键字,以便在sed命令中只能得到给定的块

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。如果您的问题是提供该示例输入的预期输出,以及您迄今为止所尝试的内容,那么我们可以帮助您。