代码之家  ›  专栏  ›  技术社区  ›  user7995721

如何使用awk打印从特定字符串开始的多线段

awk
  •  0
  • user7995721  · 技术社区  · 7 年前

    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 回复  |  直到 7 年前
        1
  •  1
  •   Ed Morton    7 年前

    假设您发布的预期输出有一个拼写错误,使得第二条输出记录出现在两行上,那么这可能就是您所需要的全部内容:

    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/'
    

    或者……基本上你需要告诉我们打印线条的标准是什么。