我有一个看起来像这样的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:未知的命令`,'
有人可以帮忙吗??
答案 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