正则表达式:获取多行 LDAP 条目
RegEx: Get multiline LDAP entry
我正在尝试捕获从 dn:.+
到条目最后一行的整个 LDAP 条目,但在下一个条目之前的最后一行停止,例如 \n#entry-id: 8266。我的试用和使用 egrep
的错误绝对无处可去。注意:我正在使用数据所在的导出 ldif 文件,fwiw。
我最接近的是 egrep "dn: cn=name,ou=People,dc=example,dc=com.+.|\n*.+\n"
但终端没有输出。我已经在 regexr.com 上测试了实际的正则表达式。我知道这是一个完全不同的环境。
提前致谢!
示例数据:
dn: cn=name,ou=People,dc=example,dc=com \
shadowLastChange: 17492 \
userPassword: password \
sn: Last \
givenName: First \
cn: first \
mail: name@example.com \
displayName: First Last \
o: University \
ou: Dept. \
objectClass: top \
objectClass: person
\# entry-id: 8266
egrep
使用扩展正则表达式(相当于 grep -E
)。更喜欢 grep -P
(perl 正则表达式)。
-z
标志使您的正则表达式多行:
grep -Pz "dn(\n|.)*?(\n\n|$)"
这与 dn
后跟任意数量的字符(或换行符)匹配,直到(?
使前面的表达式变得懒惰而不是贪婪)下一次出现 \n\n
或文件结尾 ($
)
如果数据的结构总是这样,并且可以选择使用 awk,则可以使用以 dn:
开头并以 entry-id:
结尾的 range,并且只打印行没有条目 ID:
awk '/^dn:/,/entry-id/ {
if(!/entry-id:/){print}
}' file
使用您展示的示例,请尝试以下 awk
代码。
awk '/entry-id/{found=""} /^dn:/{found=1} found' Input_file
OR 如果您只想在 entry-id:
之前从 dn:
打印 1 套,请尝试以下操作代码:
awk '/entry-id/{exit} /^dn:/{found=1} found' Input_file
我正在尝试捕获从 dn:.+
到条目最后一行的整个 LDAP 条目,但在下一个条目之前的最后一行停止,例如 \n#entry-id: 8266。我的试用和使用 egrep
的错误绝对无处可去。注意:我正在使用数据所在的导出 ldif 文件,fwiw。
我最接近的是 egrep "dn: cn=name,ou=People,dc=example,dc=com.+.|\n*.+\n"
但终端没有输出。我已经在 regexr.com 上测试了实际的正则表达式。我知道这是一个完全不同的环境。
提前致谢!
示例数据:
dn: cn=name,ou=People,dc=example,dc=com \
shadowLastChange: 17492 \
userPassword: password \
sn: Last \
givenName: First \
cn: first \
mail: name@example.com \
displayName: First Last \
o: University \
ou: Dept. \
objectClass: top \
objectClass: person
\# entry-id: 8266
egrep
使用扩展正则表达式(相当于 grep -E
)。更喜欢 grep -P
(perl 正则表达式)。
-z
标志使您的正则表达式多行:
grep -Pz "dn(\n|.)*?(\n\n|$)"
这与 dn
后跟任意数量的字符(或换行符)匹配,直到(?
使前面的表达式变得懒惰而不是贪婪)下一次出现 \n\n
或文件结尾 ($
)
如果数据的结构总是这样,并且可以选择使用 awk,则可以使用以 dn:
开头并以 entry-id:
结尾的 range,并且只打印行没有条目 ID:
awk '/^dn:/,/entry-id/ {
if(!/entry-id:/){print}
}' file
使用您展示的示例,请尝试以下 awk
代码。
awk '/entry-id/{found=""} /^dn:/{found=1} found' Input_file
OR 如果您只想在 entry-id:
之前从 dn:
打印 1 套,请尝试以下操作代码:
awk '/entry-id/{exit} /^dn:/{found=1} found' Input_file