我知道stackoverflow上可能有几百种形式的问题,但是我似乎找不到合适的答案来回答我的问题。
我正试图在Linux上解析/etc/ldap.conf文件,以便能够从(description=)之间明确地选择描述字段:

*-bash-3.2$ grep '^nss_base_passwd' /etc/ldap.conf

nss_base_passwd ou=People,dc=ca,dc=somecompany,dc=com?one?|(description=TD_FI)(description=TD_F6)(description=TD_F6)(description=TRI_142)(description=14_142)(description=REX5)(description=REX5)(description=1950)*
我想把这些提取到他们自己的列表中,不要重复:
TD_FI
TD_F6
TRI_142
14_142
REX5
1950

(或全部放在一行,用适当的分隔符)
我已经和sed玩了几个小时,但无法让它工作-我不完全确定如何使用全局选项。

最佳答案

您可以使用带有-P选项的grep,

$ grep '^nss_base_passwd' /etc/ldap.conf | grep -oP '(?<=description\=)[^)]*' | uniq
TD_FI
TD_F6
TRI_142
14_142
REX5
1950

说明:
grep中使用正向lookbehind来打印所有在description=后面到下一个)括号的字符。uniq命令用于删除重复项。

关于bash - awk/sed从模式之间提取字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24313245/

10-13 05:31