Существует множество способов сделать это, в том числе:
$ awk '/^ENDTIME/ {next}; NR>4' sourcefile
RtpNm01 CE_01 run full
RtpAcp01 CE_01 run full
RtpDynManLite01 CE_01 run full
RtpDynLiteInc01 CE_01 run full
Печатаются все входные строки после четвертой строки, за исключением любой строки, начинающейся с ENDTIME
.
Я думаю, это то, что вы пытались сделать с помощью этого странного цикла while (getline)
в блоке /Processname\s*....../
-в этом не было необходимости, awk уже перебирает каждую строку ввода, и вы можете проверить значение NR (номер текущей входной строки ).
и:
awk '! /^(STARTTIME|ENDTIME|=====|Processname)/' sourcefile
grep -vE '^(STARTTIME|ENDTIME|=====|Processname)' sourcefile
sed -E -e '/^(STARTTIME|ENDTIME|=====|Processname)/d' sourcefile
Все они выводят любые строки , кроме , соответствующие регулярному выражению. Все они используют одно и то же расширенное регулярное выражение (ERE -по умолчанию с awk
,включено с помощью -E
для grep
и sed
), чтобы искать любое из чередований в начале строки (, закрепленной с помощью^
).
и:
sed -e '1,4d; $d' sourcefile
Удалить строки с 1-й по 4-ю и последнюю строку.
Похоже, у вас установлен "традиционный" netcat (netcat-traditional
). Опция -x
доступна в сетевой программе OpenBSD (netcat-openbsd
). См. также:В чем разница между netcat -Traditional и netcat -openbsd? в Ask Ubuntu.
Существует несколько реализаций netcat, вам, вероятно, нужна BSD, потому что она предоставляет опцию -x
. В Ubuntu он доступен в пакете netcat-openbsd
.