2016-04-17 4 views
0

Ich möchte ein Textbrowser wie Luchs, w3m oder Links eine Bulk-Abfrage aus einer Liste von verfügbaren Verbindungen auszuführen. Die Ergebnisse werden nach einem Schlüsselwort gefiltert und sollten zur ursprünglichen Liste hinzugefügt werden. Ein Beispiel sei die Liste in list.txt sein:Bulk-Website Abfrage mit textbasierten Browsern

"http://dict.cc//?s=Chemical" 
"http://dict.cc//?s=Fenster" 

ich das Ergebnis extrahieren kann, wenn ich nur einen Link eine Zeit vorlegen z.B.

head -n 1 list.txt | xargs links -dump | sed -n '/NOUN/p' 
tail -n 1 list.txt | xargs links -dump | sed -n '/NOUN/p' 

funktioniert wie erwartet, aber nicht:

cat list.txt | xargs links -dump | sed -n '/NOUN/p' 

oder

for line in `cat list.txt`; do links -dump $line ; done 

Was mache ich falsch? Im nächsten Schritt soll die Ausgabe in der richtigen Linie zur Liste angehängt, so dass list.txt wie dies nach der Operation aussehen:

"http://dict.cc//?s=Chemical" edit NOUN a chemical | chemicals  - 
"http://dict.cc//?s=Fenster" NOUN das Fenster | die Fenster edit 

Sollte durch Kombination oder Nutzung mit anderen Tool wie Paste möglich sein, usw. Das ist nicht wie oben funktioniert, was eine bessere Lösung ?:

wäre
for line in `cat list.txt`; do echo -n $line && links -dump $line; done 

Das Beispiel ist nur zu Demonstrations, werde ich andere Websites verwendet als dict.cc. Leider keine API/REST verfügbar.

Antwort

0

ich mit den Befehlen twiddled haben, bis ich den Fehler gefunden. Das Problem liegt in den Anführungszeichen der URLs, die in list.txt angegeben sind. Nach dem Entfernen funktioniert dies gut:

for line in `cat engl.txt`; do 
    echo -n $line && links -dump $line| sed -n '/NOUN/p' 
done 

Wenn man (muss) doppelte Anführungszeichen halten, um die Einträge in der Datei unter Verwendung der oben als Befehl an Links weitergegeben von xargs Werke (aber nicht der Befehl nur oben):

for line in `cat list.txt`; do 
    echo -n $line && echo $line | xargs links -dump | sed -n '/NOUN/p' 
done 
1

xargs wird mehr als ein Argument auf einmal an das Programm übergeben, es sei denn, Sie begrenzen die Anzahl der Argumente: xargs -n1 links -dump. Vielleicht Links akzeptiert nur ein Argument. Wenn Sie nur die genaue Datei in der URL und keine anderen verknüpften Dokumente benötigen, können Sie auch curl verwenden.

for line in cat list.txt spaltet sich bei jedem Leerzeichen. Es wird also nicht funktionieren, wenn eine Zeile in list.txt Leerzeichen enthält.

Versuchen Sie dies über die Liste iterieren:

cat 'list.txt' | while IFS= read -r line; do 
    echo -n $line && links -dump $line 
done 
Verwandte Themen