Удалить\Изменить определенные атрибуты в LDIF с помощью vscode

Я экспортирую базу данных 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: [email protected]
givenname: Don
mail: [email protected]
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: [email protected]
givenname: Jay
mail: [email protected]
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, которые могут помочь. Заранее спасибо.


person Dan FitzGerald    schedule 24.03.2021    source источник


Ответы (1)


Хорошо, я не знаю, почему я думал, что это не работает раньше, но это работает. Следующее регулярное выражение будет делать то, что я хочу: ^webadmdata:.(.|\n)+?A8tMd3G=$\n

По-видимому, VSCode по умолчанию использует ленивый квалификатор. См. ниже: скриншот

person Dan FitzGerald    schedule 24.03.2021