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.
InformationsquelleAutor Joel | 2010-03-11
Schreibe einen Kommentar