Grep regex Stdout para telnet

3

Estou tentando usar o grep para obter um resultado de regex e canalizar os resultados dinamicamente para executar uma porta aberta em um servidor de nó.

O grep recebeu comandos contínuos, mas com intervalos variados, a partir de um programa em execução, mostra um número e, em seguida, direciona o comando por telnet. Aqui está minha tentativa de exemplo:

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

Não consigo alterar o formato da string do eco "spoof". O eco sem o grep envia com sucesso a string para o telnet. O grep não parece estar enviando para o stdOut.

Espero que o telnet receba dados do canal como:

1234
7645
8376

Qualquer ajuda sobre como conseguir isso?

    
por kirgy 27.08.2016 / 01:30

3 respostas

3

Não tenho certeza de como você chegou à conclusão de que o grep não imprime sua saída no stdout, isso é apenas incorreto.

Eu sugiro que você teste isso adicionando uma etapa do pipeline de cada vez para ver onde os problemas ocorrem.
Você primeiro descobrirá que seu comando echo literalmente imprime \r\n no final (você pode querer echo -e ) e que seu comando grep não imprime nada (porque seu padrão não corresponde realmente).

No entanto, se você corrigir o padrão ( grep -e "[0-9]\{4\}" ou grep -E "[0-9]{4}" ), você verá que ele imprime a linha inteira para todas as linhas correspondentes, não apenas a parte correspondente (você pode querer grep -o ).

Algo parecido com isso parece ser um começo mais razoável de seu pipeline:

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

Você deve continuar a partir daí (no entanto, sugiro considerar o uso de nc em vez de telnet ).

    
por 27.08.2016 / 01:52
0

Você precisa alterar o grep para:

grep -e "[0-9]\{4\}"
    
por 27.08.2016 / 01:44
0

Você não precisa de telnet para conseguir isso, o shell Bash tem esse recurso embutido, por exemplo:

exec {stream}<>/dev/tcp/127.0.0.1/1234
printf "TEST 1234\r\n" >&${stream}
grep -o "[0-9]\{4\}" <&${stream}
    
por 18.08.2017 / 12:53