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