以下のようなエントリを持つファイルが 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
上記の場合、別のファイルに。
同じことをするためのコマンドは何でしょうか。
使用するawk
awk -F"=|," '{print $2}' file
HP_NetworkSupport
Review users
また
awk -F[=,] '{print $2}' file
HP_NetworkSupport
Review users
区切り文字を,または=に設定してから、2 番目のフィールドを出力します。
カンマを含むフィールドを処理するには、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
>