在Solaris上使用regex与sed匹配并替换块
这是一些工具上的工作,如regex101.com,但我不能让它与sed一起工作 区块:在Solaris上使用regex与sed匹配并替换块,sed,solaris,solaris-10,perl,Sed,Solaris,Solaris 10,Perl,这是一些工具上的工作,如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:(?!\n\n)。*?\bdn:abcd\b(?(?!\n\n)。* 是否可以使用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:(?!\n\n)。*?\bdn:abcd\b(?(?!\n\n)。*
是否可以使用sed实现?是执行此任务的更好选择
$ perl -00ne 'print if not /^dn: abcd/' file
或
是执行此任务的更好选择
$ perl -00ne 'print if not /^dn: abcd/' file
或
使用awk的段落模式
$awk-vrs='/^dn:abcd/'ip.txt
dn:qwert,ou=测试
55555
啊
dddd
当RS设置为空字符串时,一个或多个连续的空行用作输入记录分隔符-v RS=
忽略以/^dn:abcd/
dn:abcd开头的段落
$awk-vrs=-vrs='\n\n'/^dn:abcd1/'ip.txt
dn:abcd2,ou=测试
33333
DDD
AAAA
dn:qwert,ou=测试
55555
啊
dddd
使用awk的段落模式
$awk-vrs='/^dn:abcd/'ip.txt
dn:qwert,ou=测试
55555
啊
dddd
当RS设置为空字符串时,一个或多个连续的空行用作输入记录分隔符-v RS=
忽略以/^dn:abcd/
dn:abcd开头的段落
$awk-vrs=-vrs='\n\n'/^dn:abcd1/'ip.txt
dn:abcd2,ou=测试
33333
DDD
AAAA
dn:qwert,ou=测试
55555
啊
dddd
你可以试试这个
sed '/^dn: abcd/,/^$/d' infile
你可以试试这个
sed '/^dn: abcd/,/^$/d' infile
尝试使用
perl
。。。sed不支持lookarounds或非捕获组以及perl中提供的许多其他功能……此外,如果您可以在不使用\n
的情况下修改给定的输入示例(假设您有文字换行,而不是\
后跟n
),请使用{}
按钮,以格式化样本而不是倒勾。。并添加完整的预期输出,这将有助于建议解决方案。@Sundeep已编辑,谢谢!我不熟悉perl,知道吗?试试使用perl
。。。sed不支持lookarounds或非捕获组以及perl中提供的许多其他功能……此外,如果您可以在不使用\n
的情况下修改给定的输入示例(假设您有文字换行,而不是\
后跟n
),请使用{}
按钮,以格式化样本而不是倒勾。。并添加完整的预期输出,这将有助于建议解决方案。@Sundeep已编辑,谢谢!我不熟悉perl,知道吗?