匹配后删除行,直到出现空行

时间:2015-04-09 15:45:58

标签: bash awk pattern-matching

我有一个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

我想知道的是,如何从文件中删除这些行?

1 个答案:

答案 0 :(得分:0)

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

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

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