Как передать / перенаправить из программы, которая выводит несколько значений, в программу, которая принимает только одно значение, которое будет выполняться для всех выходов один раз каждый - PullRequest
2 голосов
/ 09 декабря 2011

Я пытаюсь обработать IP-адреса из traceroute , который записывает в файл с именем td на диске, после чего я делаю

grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]*[0-9]*[0-9]' td | uniq

, чтобы получить список уникальных IP-адресов.Затем я могу получить данные геолокации для адреса по

lynx -dump http://api.hostip.info/get_html.php?ip=8.8.8.8

Но теперь, как мне передать несколько выходов первого во второй без необходимости записи в другой файл надиск.

Кроме того, мне было интересно, могу ли я полностью удалить файл td и направить traceroute непосредственно на grep , каким-то образом.

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Вы можете использовать подстановку команд и цикл for как:

for ip in $(grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]*[0-9]*[0-9]' td | sort -u); do lynx -dump http://api.hostip.info/get_html.php?ip=$ip; done

Также обратите внимание, что ваш uniq может не работать, так как он ожидает сортировки ввода. Вместо этого вы можете использовать sort -u.

0 голосов
/ 09 декабря 2011

Можете ли вы использовать оболочку for loop?

for i in $(cat td)
do
  lynx -dump http:/...${i}
done

Вы можете заменить $(cat td) на $(traceroute <options> | grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]*[0-9]*[0-9]' | uniq), чтобы избежать промежуточного файла td.

...