Probleme mit Rohrleitungen durch die sed
Ich habe Probleme bei Rohrleitungen durch die sed. Einmal habe ich Pipe die Ausgabe von sed, ich kann nicht leiten Sie die Ausgabe von sed anderswo.
wget -r -nv http://127.0.0.1:3000/test.html
Ausgänge:
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]
Ich pipe die Ausgabe durch sed um eine saubere Liste von URLs:
wget -r -nv http://127.0.0.1:3000/test.html 2>&1 | grep --line-buffered -v ERROR | sed 's/^.*URL:\([^ ]*\).*/\1/g'
Ausgänge:
http://127.0.0.1:3000/test.html
http://127.0.0.1:3000/robots.txt
http://127.0.0.1:3000/shop
Möchte ich dann dump die Ausgabe in eine Datei, so mache ich das:
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
Ich den Vorgang unterbrechen, nach ein paar Sekunden und überprüfen Sie die Datei, aber es ist leer.
Interessant, die Folgendes liefert keine Ausgabe (wie oben, jedoch Rohrleitungen sed-Ausgang, über Katze):
wget -r -nv http://127.0.0.1:3000/test.html 2>&1 | grep --line-buffered -v ERROR | sed 's/^.*URL:\([^ ]*\).*/\1/g' | cat
Warum kann ich nicht leiten Sie die Ausgabe von sed in ein anderes Programm wie cat?
- sed sollte funktionieren mit pipes, zum Beispiel: echo "foo" | sed 's/foo/bar/g' >/tmp/foo funktioniert gut für mich. Wirkt sich das hinzufügen der option-u sed einen Unterschied machen? Alternativ lassen Sie den Prozess beenden, um die Fertigstellung vor der überprüfung der Datei. sed kann nur sein, zu viel zu tun die interne Pufferung der Ergebnisse.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bei der sed ist das schreiben zu einem anderen Prozess oder auf eine Datei, es werden Daten-Puffer.
Versuchen Sie, die
--unbuffered
Optionen von sed.können Sie auch awk. seit Ihrer URL erscheint in Feld 3 können Sie $3, und Sie können entfernen Sie die grep auch.