我知道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/