#linux #bash #redirect #stdout #pipeline
#linux #bash #перенаправление #стандартный вывод #конвейер
Вопрос:
Я хочу знать, как я могу использовать стандартный вывод из конвейерной команды, а затем использовать его в соединении с nc:
<COMMAND> |
grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5]).){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' |
(echo "exit" | nc <IP-HERE> 23 -w 5
if [ "$?" -eq "0" ]; then
(
<SomeCommandsHERE>
) | nc <IP-HERE> 23 1>>$file 2>amp;1 )
Вопросы:
1) Как я могу использовать результат grep command
для моей nc
команды в этом потоке?
2) Могу ли я сказать, что результатом grep
этого является то, что ip-адрес будет использоваться только во всем следующем утверждении, как то, что я сделал здесь?
(echo "exit" | nc <IP-HERE> 23 -w 5
if [ "$?" -eq "0" ]; then
(
<SomeCommandsHERE>
) | nc <IP-HERE> 23 1>>$file 2>amp;1 )
Обновить
Что я пробовал до сих пор:
<COMMAND> |
grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5]).){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' |
while read ip; do
( echo "exit" | nc "$ip" 23 -w 5
[[ "$?" -eq "0" ]]
(
echo "hello"
) | nc "$ip" 23 1>>$file 2>amp;1
); done
Правильно ли это? Как я могу изменить if
оператор, если он не является правильным?
Ответ №1:
Если вы передаете вывод <COMMAND>
в цикл, вы можете оценивать его по одной строке за раз:
<COMMAND> | while read text; do
ipaddr=`echo $text | grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5]).){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])'`
if [ $? -eq 0 ]; then
(echo "exit" | nc $ipaddr 23 -w 5
if [ $? -eq 0 ]; then
(
<SomeCommandsHERE>
) | nc $ipaddr 23 1>>$file 2>amp;1
fi
)
fi
done
Комментарии:
1. Спасибо … 🙂 … пожалуйста, посмотрите мое обновление… Корректно ли обновление?
2. на самом деле, это будет работать только в том случае, если
<COMMAND>
выводит IP-адрес в отдельной строке без другого текста или знаков препинания.3. Спасибо. Я проверяю ваше решение … чтобы сообщить другим ребятам, пожалуйста, добавьте
'
в конце команды grep4. Простите меня. Проверяет ли это решение каждый IP-адрес только один раз, не более?
5. он будет проверять каждый IP-адрес каждый раз
<COMMAND>
, когда выводит его