2010-03-11 3 views
4

У меня возникли проблемы с трубопроводом через sed. Как только я получаю вывод в 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] 

Я трубные выход через СЭД, чтобы получить чистый список 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 

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

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

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

Почему я не могу конвейер вывод СЭДА на другую программу, как кошка?

+0

sed должен хорошо работать с трубами, например: echo "foo" | sed 's/foo/bar/g'>/tmp/foo отлично работает для меня. Добавляет ли параметр -u в sed значение? Поочередно попробуйте завершить процесс до проверки файла. sed может просто делать слишком много внутренней буферизации результатов. – bdk

ответ

6

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

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

+0

Вот и все. Благодаря! – Joel

1

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

awk '!/ERROR/{sub("URL:","",$3);print $3}' file 
+0

Спасибо. Я действительно должен научиться awk когда-нибудь. – Joel

+0

почему бы не начать с сегодняшнего дня? :) – ghostdog74

Смежные вопросы