使用grep/sed提取String的一部分

buk*_*api 3 regex grep sed

我在linux中有一个文件,其中包含类似的条目

dn: CN=HP_NetworkSupport,OU=groups,DC=HDFCSLDM,DC=COM
dn: CN=Review users,OU=groups,DC=HDFCSLDM,DC=COM
Run Code Online (Sandbox Code Playgroud)

我想只提取CN信息,直到第一个,例如:

> HP_NetworkSupport
> Review users
Run Code Online (Sandbox Code Playgroud)

在上面的情况下到另一个文件.

这样做的命令是什么.

fed*_*qui 16

这是前瞻性的一种方式:

grep -Po '(?<=CN=)[^,]*' file > new_file
Run Code Online (Sandbox Code Playgroud)

它从CN=(不包括)获取所有文本,直到找到逗号,.想法[^,]*是获取任何不是逗号的字符.

测试

$ grep -Po '(?<=CN=)[^,]*' file
HP_NetworkSupport
Review users
Run Code Online (Sandbox Code Playgroud)


Jot*_*tne 5

使用 awk

awk -F"=|," '{print $2}' file
HP_NetworkSupport
Review users
Run Code Online (Sandbox Code Playgroud)

或者

awk -F[=,] '{print $2}' file
HP_NetworkSupport
Review users
Run Code Online (Sandbox Code Playgroud)

将分隔符设置为,=,然后打印第二个字段。


要处理带有逗号的字段,您应该使用 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
Run Code Online (Sandbox Code Playgroud)