Удалите новую строку \ перевод строки перед совпадением регулярного выражения

Вот хак, который может делать то, что вы хотите:

nc -l 12345 & NC_PID=$! ; sleep 3; if [ `netstat -ant | grep ':12345 .*ESTABLISHED'` -eq 0 ]; then kill -9 $NC_PID; fi

Он запускает сервер, засыпает в течение всего времени ожидания, а затем убивает netcat, если нет установленное соединение. Существует небольшой риск зависания сервера, если существует существующее соединение, в котором удаленный порт соответствует вашему слушателю, но это было бы неудачей.

Примечание: я тестировал это на CentOS Linux, поэтому код не является полностью переносимым, но идея должна быть реализована на любой машине * nix.

1
16.09.2016, 21:56
3 ответа

Как насчет

sed '$!N; s/\n\([[:alpha:]]\{4,\}\)/ \1/; P;D' file
Q1bcd    3 - 4 ---   ---  ---     Ba     Klasse hat Aufgab..
8 a     3    ---        ---     Mr
6 b      3 - 4 ---   ---  ---     Bu     Unterricht im Klassenverband
8 a     4    ---        ---     Ke
7 a      4    De   Bi   r24    La
1
27.01.2020, 23:35

В perl , если входной файл достаточно мал, чтобы поместиться в памяти:

perl -0777 -pe 's/\n([a-zA-Z]{4})/ $1/g' file.txt
1
27.01.2020, 23:35

Это неуклюже; может быть способ получше

awk '{ c=""; if (NR!=1 && !/^[a-zA-Z]{4}/) { c="\n" }; printf("%s%s",c,$0) } END { print "" }' 

В принципе, для каждой строки мы печатаем ее без символа LF. Затем мы можем префикс следующей строки с помощью LF, если мы не хотим объединять эту строку.

Наконец, это будет означать, что в последней строке отсутствует последний LF, поэтому мы добавляем это.

0
27.01.2020, 23:35

Теги

Похожие вопросы