【发布时间】:2021-06-21 09:10:38
【问题描述】:
我正在将 LDAP 数据库导出到 LDIF,我需要对其进行一些清理。有一些我不再想要的属性。如果是单行属性就很简单:
# Entry 23: cn=dwhite,ou=ORG1,o=Root
dn: cn=dwhite,ou=ORG1,o=Root
objectclass: person
objectclass: inetorgperson
objectclass: webadmaccount
sn: white
cn: dwhite
description: don.white@company.com
givenname: Don
mail: 5551234567@txt.att.net
o: ORG1
uid: dwhite
userpassword: {SSHA}YrGx7L7L8xxxiMzuUzL+f0j+i73uFTYEPnu
webadmdata: OpenOTP.RejectCount={wcrypt}eAw+r6VX6l8lioB+1KX/6A==,OpenOTP.Las
tLogin={wcrypt}hQCwWl0KRdsiXyG7UPxPxo/WphEkyD6NPTKor8FCA5E=,OpenOTP.LoginCot
0f5vQVl1ippSdKFiGeACiJbFWHsfs=,DataMode=A8tMd3g=
# Entry 24: ou=ORG2,o=Root
dn: ou=ORG2,o=Root
objectclass: organizationalunit
ou: ORG2
# Entry 25: cn=jlee,ou=ORG2,o=Root
dn: cn=jlee,ou=ORG2,o=Root
objectclass: person
objectclass: inetorgperson
objectclass: webadmaccount
sn: Lee
cn: jlee
userpassword: {SSHA}+CreNAoXMO3XMIWxxaWsA2r3ozyeCBEShn
description: jay.lee@company.com
givenname: Jay
mail: 5551234567@txt.att.net
o: ORG2
uid: jlee
webadmdata: OpenOTP.RejectCount={wcrypt}OrtNikuuHCyBruxUTOq6eg==,OpenOTP.Las
tLogin={wcrypt}WUa965R8rFV9iHx7LrXrfzxEE3Gjd7TGiFz8AEJBmwU=,OpenOTP.LoginCo
unt={wcrypt}Qbamc7jYTL+14K1yaZS9kA==,OpenOTP.LastOTP={wcrypt}t+fDlGfP6kGIse
at8PHJdxJy15LSN4R+tJXr7B7L7+4=,DataMode=A8tMd3g=
在上面的示例中删除“objectclass:webadmaccount”属性,使用正则表达式的查找和替换:^objectclass.*webadmaccount$ 将完成这项工作。我知道这对锚点来说似乎有点矫枉过正,但在 LDIF 的其他地方,你会发现刺痛嵌入更长的线中,所以锚点。
现在,当我想摆脱 'webadmdata:' 属性时,我的问题就来了。你可以看到它们是多行的,而且长度不一样。这就是我卡住的地方,像这样的正则表达式:
^webadmdata:.*[\n\s]+.* 将获得前两行,但随后退出。如果我将 .*[\n\s]+.* 设为捕获组并在末尾使用“+”重复它:(.*[\n\s]+.*)+ 它将选择整个文件(或崩溃 vscode )。似乎我应该能够编写一个正则表达式来选择从^webadmdata 到A8tMd3g=\n\n 的所有内容,但我一辈子都无法让它工作。我希望那里有可以提供帮助的正则表达式或 VSCode 大师。提前致谢。
【问题讨论】:
标签: regex visual-studio-code ldif