2010-08-21 43 views
1

我有一個txt文件,看起來像這樣SED正則表達式的地址範圍

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

ftpd 
kswapd 
init 
etc.. 

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

mypc.local.com

使用sed我只想得到這個文件的一個部分。所以只是運行過程部分,但是我似乎沒有讓我的正則表達式正確地做到這一點。

我能走到今天

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

但是它一直在抱怨

-e表達#1,燒焦26:未知條命令',」

任何人可以幫助?

+0

你有三種模式這不是一個SED地址。它抱怨第二個'',我無法確定你的'p'指令正在嘗試做什麼。 – msw 2010-08-21 13:45:46

+0

'p'應該打印匹配的圖案,因爲打印被'-n'禁用。 – 2010-08-21 13:47:59

+0

是否要將輸出中包含的「標題」(--- RUNNING PROCESSES ---)或僅包含進程(ftps,kswpd,init等)? – 2010-08-21 13:54:30

回答

2

您是不是要找:

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

我只想要「正在運行的流程」部分... – 2010-08-21 14:02:08

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'過濾掉空白行。

0

這裏是公認的答案的另一個變量,而不是額外調用另一個sed的過程

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