Проблема с обвязкой через сед - PullRequest
4 голосов
/ 11 марта 2010

У меня проблемы с прокачкой через sed.После того, как я передал выходные данные в sed, я не могу передать вывод sed в другом месте.

wget -r -nv http://127.0.0.1:3000/test.html

Выходы:

2010-03-12 04:41:48 URL:http://127.0.0.1:3000/test.html [99/99] -> "127.0.0.1:3000/test.html" [1]
2010-03-12 04:41:48 URL:http://127.0.0.1:3000/robots.txt [83/83] -> "127.0.0.1:3000/robots.txt" [1]
2010-03-12 04:41:48 URL:http://127.0.0.1:3000/shop [22818/22818] -> "127.0.0.1:3000/shop.29" [1]

Я передаю вывод через sed, чтобы получить чистый список URL:

wget -r -nv http://127.0.0.1:3000/test.html 2>&1 | grep --line-buffered -v ERROR | sed 's/^.*URL:\([^ ]*\).*/\1/g'

Выходы:

http://127.0.0.1:3000/test.html
http://127.0.0.1:3000/robots.txt
http://127.0.0.1:3000/shop

Я хотел бы затем вывести вывод в файл, поэтому я делаю это:

wget -r -nv http://127.0.0.1:3000/test.html 2>&1 | grep --line-buffered -v ERROR | sed 's/^.*URL:\([^ ]*\).*/\1/g' > /tmp/DUMP_FILE

Я прерываю процессЧерез несколько секунд проверьте файл, но он пуст.

Интересно, что следующий вывод не выводит (то же, что и выше, но передает вывод sed через cat):

wget -r -nv http://127.0.0.1:3000/test.html 2>&1 | grep --line-buffered -v ERROR | sed 's/^.*URL:\([^ ]*\).*/\1/g' | cat

Почемуя не могу передать вывод sed другой программе, например, cat?

Ответы [ 2 ]

7 голосов
/ 11 марта 2010

Когда sed записывает данные в другой процесс или в файл, он буферизует данные.

Попробуйте добавить опции --unbuffered в sed.

1 голос
/ 12 марта 2010

вы также можете использовать awk. поскольку ваш URL-адрес отображается в поле 3, вы можете использовать $ 3 и удалить grep.

awk '!/ERROR/{sub("URL:","",$3);print $3}' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...