代码之家  ›  专栏  ›  技术社区  ›  Tony The Lion

sed正则表达式地址范围

  •  1
  • Tony The Lion  · 技术社区  · 14 年前

    我有一个类似这样的txt文件

    -----------------------------------
               RUNNING PROCESSES
    -----------------------------------
    
    ftpd
    kswapd
    init
    etc..
    
    ---------------------------------
              HOSTNAME
    --------------------------------
    

    mypc.local.com

    对于sed,我只想得到这个文件的一部分。因此,只运行进程部分,但是我似乎没有得到我的regexp权利这样做。

    sed -n '/^-./,/RUNNING PROCESSES/, /[[:space::]]/p' linux.txt | more
    

    但它一直在抱怨

    3 回复  |  直到 14 年前
        1
  •  2
  •   msw    14 年前

    你是说:

    sed -n '/RUNNING PROCESSES/,/HOSTNAME/p' linux.txt | 
      sed -e '/^[- ]/d' -e '/^$/d'
    
        2
  •  0
  •   paxdiablo    14 年前

    awk 为此:

    awk '/RUNNING PROCESSES/ {s=2}
         /^---/              {s=s-1}
                             {if(s>0){print}}' linux.txt
    

    将为您提供:

               RUNNING PROCESSES
    -----------------------------------
    
    ftpd
    kswapd
    init
    etc..
    

    然后你就可以通过管道 sed '/^$/d'

        3
  •  0
  •   ghostdog74    14 年前

    这里是接受答案的另一个变量,但不是对另一个sed进程的额外调用

    sed -n '/RUNNING PROCESSES/,/HOSTNAME/{s/RUNN.*\|HOSTNAME//;s/--*//;/^$/!p}' file