如何使用awk以特定字符串开头打印多行段

时间:2017-08-09 15:29:56

标签: awk

我正在使用ldapsearch命令,其中我的输出字符串以" dn"开头的特定字符串开头。我只想要有另一条线与此相关的行,说我不想要任何以" dn"开头的行。单线输出包含空格。

bash-4.1$ ldapsearch -h kts77 -LLL -xxx -b "ou=networks,ou=corp,ou=services,o=swift.com" '(&(cn=*noida*))' dn krvNetworkServiceKVP 

dn: ipnetworknumber=192.168.1, ou=networks,ou=corp,ou=services,o=swift.com

dn: ipnetworknumber=192.168.2, ou=networks,ou=corp,ou=services,o=swift.
 com

dn: ipnetworknumber=172.23.48, ou=networks,ou=corp,ou=services,o=swift.com
krvNetworkServiceKVP: auto_master_lnx=auto_master_lnx_noida
krvNetworkServiceKVP: SyslogServer=ralph-noida.swift.com
krvNetworkServiceKVP: adsite=India
krvNetworkServiceKVP: cupsserver=vlno-noidacups
krvNetworkServiceKVP: dnsserver_1=192.168.1.100
krvNetworkServiceKVP: dnsserver_2=192.168.2.100

所需的输出应该只是:

dn: ipnetworknumber=172.23.48, ou=networks,ou=corp,ou=services,o=swift.com
krvNetworkServiceKVP: auto_master_lnx=auto_master_lnx_noida
krvNetworkServiceKVP: SyslogServer=ralph-noida.swift.com
krvNetworkServiceKVP: adsite=India
krvNetworkServiceKVP: cupsserver=vlno-noidacups
krvNetworkServiceKVP: dnsserver_1=192.168.1.100
krvNetworkServiceKVP: dnsserver_2=192.168.2.100

1 个答案:

答案 0 :(得分:1)

这可能就是您所需要的,假设您发布的预期输出有一个拼写错误,使第二个输出记录显示为2行:

ldapsearch ... | awk -v RS= -v ORS='\n\n' -F'\n' 'NF>1'

鉴于您的意见,可能其中一个是您需要的:

ldapsearch ... | awk -v RS= -v ORS='\n\n' -F'\n' '$2!~/^ /'

ldapsearch ... | awk -v RS= -v ORS='\n\n' -F'\n' '$2~/^krvNetworkServiceKVP/'

或....基本上你需要告诉我们印刷线的标准是什么。