我在通过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]
我管通过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输出通过猫):
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将像猫另一个程序的输出?
sed应该可以正常使用管道,例如:echo“foo”| sed's/foo/bar/g'>/tmp/foo对我来说工作得很好。向sed添加-u选项是否有所作为?或者尝试在检查文件之前让该过程完成。 sed可能只是做了太多的内部缓冲结果。 – bdk 2010-03-11 17:58:16