这正在使用regex101.com等一些工具,但我无法使用sed。
阻止:
dn: abcd1,ou=test
aaaaa
bbbb
1111
dn: abcd2,ou=test
33333
ddddd
aaaaa
dn: qwert,ou=test
55555
hhhh
dddd
我希望每个以dn: abcd
开头的块都匹配并替换。一个块总是以\n\n
结尾。
Regexp:(?s)\b(?:(?!\n\n).)*?\bdn: abcd\b(?:(?!\n\n).)*
是否可以用sed实现?
答案 0 :(得分:1)
perl是完成此任务的更好选择。
$ perl -00ne 'print if not /^dn: abcd/' file
或
$ perl -ne 'print if not /^dn: abc/ .. /^$/' file
dn: qwert,ou=test
55555
hhhh
dddd
答案 1 :(得分:1)
使用awk
的段落模式
$ awk -v RS= '!/^dn: abcd/' ip.txt
dn: qwert,ou=test
55555
hhhh
dddd
-v RS=
当RS设置为空字符串时,一个或多个连续的空行用作输入记录分隔符!/^dn: abcd/
忽略以dn: abcd
请注意,默认输出记录分隔符是单个换行符,因此您可能需要以下内容:
$ awk -v RS= -v ORS='\n\n' '!/^dn: abcd1/' ip.txt
dn: abcd2,ou=test
33333
ddddd
aaaaa
dn: qwert,ou=test
55555
hhhh
dddd
答案 2 :(得分:0)
你可以试试这个sed
sed '/^dn: abcd/,/^$/d' infile