sed正则表达式地址范围

时间:2010-08-21 13:29:55

标签: regex linux sed

我有一个看起来像这样的txt文件

-----------------------------------
           RUNNING PROCESSES
-----------------------------------

ftpd
kswapd
init
etc..

---------------------------------
          HOSTNAME
--------------------------------

mypc.local.com

使用sed我想得到这个文件的一部分。所以只是RUNNING PROCESSES部分,但我似乎没有让我的正则表达式这样做。

我到目前为止

sed -n '/^-./,/RUNNING PROCESSES/, /[[:space::]]/p' linux.txt | more
然而,它一直在抱怨

-e表达式#1,字符26:未知的命令`,'

有人可以帮忙吗??

3 个答案:

答案 0 :(得分:2)

你的意思是:

sed -n '/RUNNING PROCESSES/,/HOSTNAME/p' linux.txt | 
  sed -e '/^[- ]/d' -e '/^$/d'

答案 1 :(得分:0)

我可能更愿意使用awk

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

awk会给你:

           RUNNING PROCESSES
-----------------------------------

ftpd
kswapd
init
etc..

然后,您可以通过sed '/^$/d'来管道,以过滤掉空行。

答案 2 :(得分:0)

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

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