我在 linux 中有一个文件,其条目如下
dn: CN=HP_NetworkSupport,OU=groups,DC=HDFCSLDM,DC=COM
dn: CN=Review users,OU=groups,DC=HDFCSLDM,DC=COM
我只想提取 CN 信息,直到第一个,例如:
> HP_NetworkSupport
> Review users
在上述情况下到另一个文件。
做同样的事情会是什么命令。
这是前瞻的一种方式:
grep -Po '(?<=CN=)[^,]*' file > new_file
它从(不包括)获取所有文本,CN=
直到找到逗号,
。的想法[^,]*
是获取任何不是逗号的字符。
$ grep -Po '(?<=CN=)[^,]*' file
HP_NetworkSupport
Review users
使用awk
awk -F"=|," '{print $2}' file
HP_NetworkSupport
Review users
或者
awk -F[=,] '{print $2}' file
HP_NetworkSupport
Review users
将分隔符设置为,
or =
,然后打印第二个字段。
要处理带有逗号的字段,您应该使用 LDAP 解析器,但这应该可以工作。
echo file
dn: CN=HP_NetworkSupport,OU=groups,DC=HDFCSLDM,DC=COM
dn: CN="Review, users",OU=groups,DC=HDFCSLDM,DC=COM
awk -F"CN=|,OU" '{print $2}' file
HP_NetworkSupport
Review, users
使用sed
:
$ sed -r 's/.*CN=([^,]*),.*/\1/' inputfile
HP_NetworkSupport
Review users
perl -lne 'print $1 if(/CN=([^\,]*),/)' your_file
测试如下:
> cat temp
dn: CN=HP_NetworkSupport,OU=groups,DC=HDFCSLDM,DC=COM
dn: CN=Review users,OU=groups,DC=HDFCSLDM,DC=COM
> perl -lne 'print $1 if(/CN=([^\,]*),/)' temp
HP_NetworkSupport
Review users
>
通过以下命令对其进行管道传输:
sed -E "s/.*CN=(.+?),OU=.*/\\1/g"