Powershell:从LDIF文件中提取模式之间的值

Mutukrp

我正在处理正则表达式,我的任务是编写一个脚本以提取LDIF上搜索模式之间的特定文本,并且遇到了一些问题。我们的LDIF为OpenLDAP格式,因此我们的文件为

dn: cn=user1,ou=department,o=company,c=root
changetype: add
givenName: Givenname1
sn: SN1
Country: Cn1
userCertificate;binary:: lowhjsefnasdvonidfb8943th54ebghyLHFUn9894y9bKalkbjsf
 89ehgvpnoLNGPOVNnl;aiorgpnsg;n\vbubGB*gpbeoabgpiobrgaragop08hgnaoergn9r0agnh
 U0hBMjU2MB4XDTE5MDYwNTA3lowhjsefnasdvonidfb8943th54ebghyLHFUn9894y9bKalkbjsf
 89ehgvpnoLNGPOVNnl;aiorgpnsg;n\vbubGB*gpbeoabgpiobrgaragop08hgnaoergn9r0agnh
 U0hBMjU2MB4XDTE5MDYwNTA3lowhjsefnasdvonidfb8943th54ebghyLHFUn9894y9bKalkbjsf
 89ehgvpnoLNGPOVNnl;aiorgpnsg;n\vbubGB*gpbeoabgpiobrgaragop08hgnaoergn9r0agnh
 U0hBMjU2MB4XDTE5MDYwNTA3lowhjsefnasdvonidfb8943th54ebghyLHFUn9894y9bKalkbjsf
 89ehgvpnoLNGPOVNnl;aiorgpnsg;n\vbubGB*gpbeoabgpiobrgaragop08hgnaoergn9r0agnh
 U0hBMjU2MB4XDTE5MDYwNTA3
City: City1

dn: cn=user3,ou=department3,o=company,c=root
changetype: add
givenName: Givenname3
sn: SN3
customdn: cn=user3,ou=department3,o=company,c=root
userCertificate;binary:: lowhjsefnasdvonidfb8943th54ebghyLHFUn9894y9bKalkbjsf
 89ehgvpnoLNGPOVNnl;aiorgpnsg;n\vbubGB*gpbeoabgpiobrgaragop08hgnaoergn9r0agnh
 U0hBMjU2MB4XDTE5MDYwNTA3lowhjsefnasdvonidfb8943th54ebghyLHFUn9894y9bKalkbjsf
 89ehgvpnoLNGPOVNnl;aiorgpnsg;n\vbubGB*gpbeoabgpiobrgaragop08hgnaoergn9r0agnh
 U0hBMjU2MB4XDTE5MDYwNTA3lowhjsefnasdvonidfb8943th54ebghyLHFUn9894y9bKalkbjsf
 89ehgvpnoLNGPOVNnl;aiorgpnsg;n\vbubGB*gpbeoabgpiobrgaragop08hgnaoergn9r0agnh
 U0hBMjU2MB4XDTE5MDYwNTA3lowhjsefnasdvonidfb8943th54ebghyLHFUn9894y9bKalkbjsf
 89ehgvpnoLNGPOVNnl;aiorgpnsg;n\vbubGB*gpbeoabgpiobrgaragop08hgnaoergn9r0agnh
 U0hBMjU2MB4XDTE5MDYwNTA3
Country: Cn3
City: City3

dn: cn=user2,ou=department,o=company,c=root
changetype: add
givenName: Givenname2
sn: SN2
customdn: cn=user2,ou=department,o=company,c=root
userCertificate;binary:: lowhjsefnasdvonidfb8943th54ebghyLHFUn9894y9bKalkbjsf
 89ehgvpnoLNGPOVNnl;aiorgpnsg;n\vbubGB*gpbeoabgpiobrgaragop08hgnaoergn9r0agnh
 U0hBMjU2MB4XDTE5MDYwNTA3lowhjsefnasdvonidfb8943th54ebghyLHFUn9894y9bKalkbjsf
 89ehgvpnoLNGPOVNnl;aiorgpnsg;n\vbubGB*gpbeoabgpiobrgaragop08hgnaoergn9r0agnh
 U0hBMjU2MB4XDTE5MDYwNTA3lowhjsefnasdvonidfb8943th54ebghyLHFUn9894y9bKalkbjsf
 89ehgvpnoLNGPOVNnl;aiorgpnsg;n\vbubGB*gpbeoabgpiobrgaragop08hgnaoergn9r0agnh
 U0hBMjU2MB4XDTE5MDYwNTA3lowhjsefnasdvonidfb8943th54ebghyLHFUn9894y9bKalkbjsf
 89ehgvpnoLNGPOVNnl;aiorgpnsg;n\vbubGB*gpbeoabgpiobrgaragop08hgnaoergn9r0agnh
 U0hBMjU2MB4XDTE5MDYwNTA3
Country: Cn1
City: City1

文件行由换行符(CRLF)分隔。因此,我尝试使用以下模式仅提取User3的文本,这似乎给了我空白文件。

$RegexPattern = "`r`ndn: cn=User3(.*?)`r`n`r`n"
$result = [regex]::match($inputfile,$RegexPattern).Groups[1].Value

如果将捕获模式从更改为(。*),则从第一个匹配项之后获取所有文本。可以肯定的是,我丢失了一些东西,但是看不到我丢失了什么。有人可以帮忙吗?

编辑:也添加有关自定义DN的一些其他信息。在dn:的搜索字符串中包括CRLF的原因是,在用户对象上还有一个自定义DN,它是dn属性的副本,以实现向后兼容。我已经使用该属性更新了上面的示例LDIF条目。编辑2:Wiktor的正则表达式几乎可以起作用,直到代码偶然发现userCertificate属性为止,该属性仅用LF而不是在其他地方看到的CR + LF来分割多个属性。

维克多·史翠比维

首先,请确保将整个文件读入一个变量:

$inputfile = Get-Content .\input.ldif -Raw

然后,您需要一个正则表达式

$RegexPattern = '(?mi)^dn: cn=User3[^\r\n]*(?:\r?\n[^\r\n]+)*'
$result = [regex]::match($inputfile,$RegexPattern).Value

参见正则表达式演示

细节

  • (?mi) -不区分大小写的匹配为ON,多行行为也为ON
  • ^ -一行的开始
  • dn: cn=User3 -文字
  • [^\r\n]* -CR和LF以外的0+个字符
  • (?:\r?\n[^\r\n]+)* -出现0+次以上的CRLF / LF,然后出现1+个以上CR和LF以外的字符(因此,上述字符串下方的所有非空行)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从文件中提取两个模式之间的线

来自分类Dev

从文本文件中提取模式之间的数据

来自分类Dev

定期从文本文件中提取模式之间的文本

来自分类Dev

从两个匹配模式之间的文件中提取内容(仅从文件中提取HTML)

来自分类Dev

linux:从文件中提取模式

来自分类Dev

从文件中提取特定值

来自分类Dev

从巨大的(强制)文本文件中提取两种模式之间的数据

来自分类Dev

从多个CSV文件中提取几种模式

来自分类Dev

从文件中提取一种模式

来自分类Dev

从 .cpp 文件中提取与模式匹配的“if”块

来自分类Dev

在Excel中提取空格之间的值

来自分类Dev

Powershell - 从 cab 文件中提取 KB 名称

来自分类Dev

使用 powershell 从大文件中提取文本

来自分类Dev

从.npy文件中提取特定值

来自分类Dev

从txt文件的多行中提取某些值

来自分类Dev

如何从xml文件中提取属性值

来自分类Dev

从JSON文件中提取特定值

来自分类Dev

从文件中提取两个值

来自分类Dev

从json文件中提取条件值

来自分类Dev

从多个 html 文件中提取 <tr> 值

来自分类Dev

如何在powershell中的foreach循环之前从文本文件中提取一种模式

来自分类Dev

从模式中提取单词

来自分类Dev

在Perl中提取模式

来自分类Dev

Powershell:在目录的最新文件中提取2个字符串之间的数据

来自分类Dev

Powershell正则表达式从日志文件中的行中提取圆括号之间的字符串

来自分类Dev

从emacs组织模式表中提取字段值

来自分类Dev

如何在bash中提取模式但填充缺失值?

来自分类Dev

如果模式在Python中匹配,则从文件中提取数据

来自分类Dev

从文件regex中提取与给定模式匹配的段落

Related 相关文章

热门标签

归档