У меня есть текстовый файл, который выглядит примерно так
-----------------------------------
RUNNING PROCESSES
-----------------------------------
ftpd
kswapd
init
etc..
---------------------------------
HOSTNAME
--------------------------------
mypc.local .com
С помощью sed я хочу получить только один раздел этого файла. Так что просто секция RUNNING PROCESSES, однако мне кажется, что я не смог правильно настроить свое регулярное выражение.
Я дошел до этого
sed -n '/^-./,/RUNNING PROCESSES/, /[[:space::]]/p' linux.txt | more
, однако он продолжает жаловаться на
-e выражение # 1, char 26: unknown commmand `, '
Кто-нибудь может помочь ??
Вы имели в виду:
sed -n '/RUNNING PROCESSES/,/HOSTNAME/p' linux.txt |
sed -e '/^[- ]/d' -e '/^$/d'
Вот еще одна переменная принятого ответа, но не дополнительный вызов другого процесса sed
sed -n '/RUNNING PROCESSES/,/HOSTNAME/{s/RUNN.*\|HOSTNAME//;s/--*//;/^$/!p}' file
Я бы, вероятно, предпочел использовать для этого awk
:
awk '/RUNNING PROCESSES/ {s=2}
/^---/ {s=s-1}
{if(s>0){print}}' linux.txt
Это awk
даст вам:
RUNNING PROCESSES
-----------------------------------
ftpd
kswapd
init
etc..
Затем вы можете передать это через sed '/ ^ $ / d'
для фильтрации пустых строк.