我在Linux中有一个文件,其中包含类似以下条目的信息:
dn: CN=HP_NetworkSupport,OU=groups,DC=HDFCSLDM,DC=COM
dn: CN=Review users,OU=groups,DC=HDFCSLDM,DC=COM
我希望只提取中文信息,直到第一个逗号,例如:
> 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
,
或=
,然后打印第二个字段。
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"
grep -Po '(?<=<hola>).*(?=</hola>)' <<< "<hola>adeu</hola>"
毫无问题地返回“adeu”。当然,你可以转义每个字符,但这个不是必要的。 - fedorqui