【问题标题】:Remove lines after match, until blank line occurs匹配后删除行,直到出现空行
【发布时间】:2015-04-10 00:05:31
【问题描述】:

我有一个 ldif 文件,并且正在检索匹配的行,以及后面的行,直到我到达一个空行。这很好用。

$ awk '/dn:\ cn=test/,/pattern|^$/' $file
dn: cn=test,cn=Users,dc=test,dc=com
cn: John
sn: Smith
givenname: Test
mail: test@test.com
userpassword: password
uid: test
defaultgroup: cn=test,cn=test01,cn=groups,dc=test,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetorgperson
objectclass: user
objectclass: user2

我想知道的是,我怎样才能从文件中删除这些行?

【问题讨论】:

  • 抱歉 - 澄清一下。我正在寻找从原始文件中删除这些行,基本上删除整个节。

标签: bash awk pattern-matching


【解决方案1】:

要从输入文件中删除这些行,您可以使用! 否定范围,因此只打印其他行:

awk '!(/dn:\ cn=test/,/pattern|^$/)' "$file" > tmp && mv tmp "$file"

输出被重定向到一个临时文件,然后原始文件被覆盖。

【讨论】:

  • 谢谢汤姆。我没有想到这种方法。唯一的问题是我有大量 - 大约 500,000 个帐户要迭代。无论如何我可以就地移除吗?源文件快1Gb了,不想每次都重写。
  • 不幸的是,即使是假装就地编辑的方法也会在后台创建一个新文件,因此您的选择有限。
猜你喜欢
  • 2022-11-07
  • 2014-10-07
  • 1970-01-01
  • 2013-06-22
  • 2012-09-04
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 2012-04-02
相关资源
最近更新 更多