Grep regex Stdout to telnet

Я пытаюсь использовать grep, чтобы получить результат регулярного выражения и передать результаты на лету в telnet, запускающий открытый порт, на сервер узла .

Команда grep принимает непрерывные, но с разным интервалом команды от запущенной программы, выводит число, а затем передает его по telnet. Вот моя попытка примера:

echo "TEST 1234\r\n" | grep -e "[0-9]{4}" | telnet 127.0.0.1 1234

Я не могу изменить строковый формат эха «обман». Эхо без grep успешно отправляет строку в telnet. Grep не делает t похоже отправляет на stdOut.

Я ожидаю, что telnet будет получать данные из канала, например:

1234
7645
8376

Любая помощь, как этого добиться?

3
задан 27 August 2016 в 02:30
3 ответа

Я не уверен, как вы пришли к выводу, что grep не выводит свои данные на стандартный вывод, это просто неверно.

Я бы посоветовал вам проверить это добавляя по одному шагу конвейера, чтобы увидеть, где возникают проблемы.
Сначала вы обнаружите, что ваша команда echo буквально печатает \ r \ n в конце (вы можете захотеть echo -e )и что ваша команда grep ничего не печатает (потому что ваш шаблон на самом деле не соответствует).

Однако, если вы исправите шаблон (либо grep -e "[0-9] \ {4 \} " или grep -E" [0-9] {4} ") вы заметите, что он печатает всю строку для всех совпадающих строк, а не только соответствующую часть (вы можете grep -o ).

Что-то вроде этого кажется более разумным началом вашего конвейера:

 echo -e "TEST 1234\r\n" | grep -o -e "[0-9]\{4\}" 

Вы должны иметь возможность продолжить с этого места (однако я бы предложил рассмотреть возможность использования nc вместо telnet ).

3
ответ дан 3 December 2019 в 06:29

Вам необходимо изменить grep to:

grep -e "[0-9]\{4\}"
0
ответ дан 3 December 2019 в 06:29

Для этого вам не нужен telnet , оболочка Bash имеет встроенную функцию, например:

exec {stream}<>/dev/tcp/127.0.0.1/1234
printf "TEST 1234\r\n" >&${stream}
grep -o "[0-9]\{4\}" <&${stream}
0
ответ дан 3 December 2019 в 06:29

Теги

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