linux - sed 字符串大小写与 "\<>"的匹配问题?

标签 linux bash shell awk sed

我使用下面的 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/

相关文章:

php - 通过浏览器上的按钮向 Linux 服务器发送特殊代码

php - 下载 php 文件 tar

linux - 在别名中设置变量不起作用

linux - 如何在 Linux 中以不同名称 "*100000.prm"复制以 "*full.prm"结尾的相同位置的文件?

linux - 翻转粘贴命令输出

linux - rsync 仅同步当天文件

linux - sata 硬盘暴露什么样的 api?

linux - 如何使用 linux 别名 cd 进入文件夹?

c - 如何使用shell命令刷新

bash - 使用 bash 命令(带管道)的输出作为另一个命令的参数