Как к grep netcat вывод

Вы найдете пред - и пост - установка и сценарии удаления в /var/lib/dpkg/info.

% ls -1 /var/lib/dpkg/info/hdparm.*
/var/lib/dpkg/info/hdparm.conffiles
/var/lib/dpkg/info/hdparm.list
/var/lib/dpkg/info/hdparm.md5sums
/var/lib/dpkg/info/hdparm.postinst
/var/lib/dpkg/info/hdparm.postrm
/var/lib/dpkg/info/hdparm.preinst

hdparm.postinst (сценарий, который является, бежал за успешной установкой), тот, который звонит update-rc.

13
30.12.2014, 12:47
7 ответов

Вы можете использовать Команда READ Command ( Bash Встроенная) Чтобы заставить символы можно прочитать по одному:

netcat localhost 9090 | (
    cnt=0
    line=
    while read -N 1 c; do
        line="$line$c"
        if [ "$c" = "{" ]; then
            cnt=$((cnt+1))
        elif [ "$c" = "}" ]; then
            cnt=$((cnt-1))
            if [ $cnt -eq 0 ]; then
                printf "%s\n" "$line"
                line=
            fi
        fi
    done
) | grep sender

Этот скрипт должен распечатать каждый полный вывод с балансировкой { и } , но вы можете изменить скрипт, чтобы делать все, что вы хотите. Этот скрипт не преуспел на этапе по сравнению с почти большим, но это довольно просто и, кажется, работает для меня ...

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

4
27.01.2020, 19:53

Я думаю, что проблема является отсутствием новых линий в Netcat выход. Я вижу две обходные пути:

  1. Вставьте новую строку каждую секунды x (с неудачными последствиями, если новая линия вставлена ​​в середине источника ):

     (во время сна 1  ; Do Echo; Готово и Netcat ...) |  Grep Source.
     
  2. Использование awk с rs, кроме ньюлайн:

     netcat ... |  awk -v rs = '}' -v or = '}' '/ Источник /'
     
2
27.01.2020, 19:53

Использование Часы Команда :

watch 'netcat localhost 9090 | grep sender'
1
27.01.2020, 19:53

Добавить - Буферизатор линии Использование линейной буферизации на выходе:

netcat localhost 9090 | grep --line-buffered sender 
1
27.01.2020, 19:53

В соответствии с комментарием @ user43791 , попробуйте отключить буферизацию в конвейере , например:

stdbuf -o0 netcat localhost 9090 | grep sender
0
27.01.2020, 19:53

В Bash вы можете использовать файлы псевдоустройства , чтобы открыть TCP-соединение и, как обычно, выполнить grep. Например:

$ grep "sender" < /dev/tcp/example.com/1234

Чтобы проверить это, просто запустите сервер, который может отправить какой-то файл, например:

$ nc -vl 1234 < /etc/hosts

Затем в другом терминале запустите тест для grep , вывод:

$ grep "127" < /dev/tcp/localhost/1234
127.0.0.1   localhost
0
27.01.2020, 19:53

Ответ здесь: grep не соответствует в выводе nc

netcat выводит подробные журналы по стандарту error, поэтому нам нужно фиксировать ошибки, прежде чем мы перейдем к grep.

$ netcat -zv localhost 1-9000 2>&1 | grep succeeded
8
27.01.2020, 19:53

Теги

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