Bestimmten Wert aus einer Datei holen

amiga1200

Member
habe versehen die Frage gelöscht

Es gingt um die Frage, wie man aus einer 2 -zeiligen Textdatei ein Zeil ausschneidet

id,name,stadt,url,strasse
2,rose,hamburg,http://www.suseforum.de,softstr.

hier sollte die url geholt werden
 

amiga1200

Member
Ich breche mir die Finger, und du löscht das mit ein 1 Zeiler.

Ein problem habe ich noch, wobei mir das schon echt peinlich ist, aber ich habe google gefragt, doch wenig verstanden, kenne mich besser in php aus.

Ich habe die Url mit Anführungszeichen
also print $url ergibt
"http://www..."
ich must hier noch die " weg bekommen die am anfang und am Ende sitzen,
in php eine sache von 1 Sekunde : $st= replace('"',"",$st);

ich gehe dann davon aus, das ich wget dann mit einer Variable fütter kann
Wget $url?
 

Rain_Maker

Administrator
Teammitglied
amiga1200 schrieb:
Ich habe die Url mit Anführungszeichen
also print $url ergibt
"http://www..."
ich muss hier noch die " weg bekommen die am anfang und am Ende sitzen,
*Öhm* .... nö

Code:
 wget http://suseforum.de/index.php

--- snip ---

index.php                   [ <=>                            ]  98,17K   512KB/s    in 0,2s    

2016-07-29 21:19:12 (512 KB/s) - »index.php« gespeichert [100531]

md5sum index.php 
5ee48662619ca27cdd44b2cbc043b2a9  index.php
Und

Code:
wget "http://suseforum.de/index.php"

index.php                   [ <=>                            ]  98,17K   525KB/s    in 0,2s    

2016-07-29 21:19:27 (525 KB/s) - »index.php« gespeichert [100531]

md5sum index.php 
5ee48662619ca27cdd44b2cbc043b2a9  index.php
Greetz,

RM

P.S. Den (unbeabsichtigten?) Doppel-Thread habe ich fachgerecht entsorgt.
 

amiga1200

Member
ich habe noch was übersehen, der Link ist leider
"suse.de?a=25&b=1024&c=2024"
das & mag wget nicht, die müssen in
"&"
übersetzt werden.
also
"suse.de?a=25"&"b=1024"&"c=2024"

in diesen Fall müssen die " am Anfang und Ende auf jeden Fall weg, glaube ich jedennfalls
 

Rain_Maker

Administrator
Teammitglied
amiga1200 schrieb:
ich habe noch was übersehen, der Link ist leider
suse.de?a=25&b=1024&c=2024
das & mag weget nicht, die müssen in
"&"
übersetzt werden.
also
suse.de?a=25"&"b=1024"&"c=2024

in diesen Fall müssen die " am Anfang und Ende auf jeden Fall weg.
Nein, im Gegenteil, gerade dann sollte man die URL quoten ...

Code:
wget -c "http://suse.de?a=25&b=1024&c=2024"
--2016-07-29 21:49:19--  http://suse.de/?a=25&b=1024&c=2024
Auflösen des Hostnamens »suse.de (suse.de)« … 130.57.5.70
Verbindungsaufbau zu suse.de (suse.de)|130.57.5.70|:80 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 301 Moved Permanently
Platz: https://www.suse.com/de-de/?a=25&b=1024&c=2024 [folgend]
--2016-07-29 21:49:19--  https://www.suse.com/de-de/?a=25&b=1024&c=2024
Auflösen des Hostnamens »www.suse.com (www.suse.com)« … 130.57.66.10
Verbindungsaufbau zu www.suse.com (www.suse.com)|130.57.66.10|:443 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: nicht spezifiziert [text/html]
Wird in »»index.html?a=25&b=1024&c=2024«« gespeichert.

index.html?a=25&b=1024&     [     <=>                        ] 167,94K   129KB/s    in 1,3s    

2016-07-29 21:49:22 (129 KB/s) - »index.html?a=25&b=1024&c=2024« gespeichert [171981]
weil sonst die Shell das "&" als Steuerzeichen interpretieren würde.

Greetz,

RM
 

amiga1200

Member
Lose in der Shel:
Code:
wget -c "http://suse.de?a=25&b=1024&c=2024"
ist ok
aber ein Script mit:

Code:
st='"http://suse.de?a=25&b=1024&c=2024"'
echo $st  # richtig angezeigt   "http://suse.de?a=25&b=1024&c=2024"  mit Hochkomma!
wget  -c  $st
ergibt Scheme missing.
 

Rain_Maker

Administrator
Teammitglied
Hochkommata? Wozu?

Code:
#!/bin/sh
URL="http://suse.de?a=25&b=1024&c=2024"

wget -c "$URL"
Works for me.™

Greetz,

RM

P.S. Das sind "double quotes" (= doppeltes Anführungszeichen, SHIFT+2)
 

amiga1200

Member
Der URL in der Textdatei ist halt mit Hochkomma


Code:
st1= grep http nix | awk -F ',' '{print $7}'
echo $st1  #
ergibt "www.suse.de"
um das zu simulieren schreibe ich
Code:
st2= '"www.suse.de"'
jetzt ist st1 genau wie st2
hier spinnt wget
aber
Code:
st3= "www.suse.de"
hier ist der String ohne Hochkomma und wget läuft durch

Code:
echo   $st|sed 's/"//g'  #
haut die Hochkomma beim ausgeben raus
aber ich brauche sowas wie
Code:
st =   $st|sed 's/"//g'
 

Rain_Maker

Administrator
Teammitglied
amiga1200 schrieb:
Es gingt um die Frage, wie man aus einer 2 -zeiligen Textdatei ein Zeil ausschneidet

id,name,stadt,url,strasse
2,rose,hamburg,http://www.suseforum.de,softstr

hier sollte die url geholt werden
vs.

amiga1200 schrieb:
Der URL in der Textdatei ist halt mit Hochkomma
Könntest Du Dich vielleicht für eine Version entscheiden?

Und dann das Zeug genau so posten, wie es da steht (am besten in Code-Tags)?

Wenn da irgendwas Vertrauliches drin steht, dann ändere von mir aus die Daten aber _NICHT_ die Sonder- und Trennzeichen.

Greetz,

RM
 

amiga1200

Member
Das hast du recht, die url ist schon mit Hochkomma



ich hatte mir zwar schon ein Befehl gebaut, aber der funktioniert mit ein String nicht

Code:
st='"regen"'
echo $st   # hier mit Hochkomma
st2=$( echo   $st|sed 's/"//g')
echo $st2  # hier wie es sein sollte ohne Kochkomma

Aber 
st= grep http quelle | awk -F ',' '{print $7}'
echo $st #  mit Hochkomma
st2=$( echo   $st|sed 's/"//g')
echo $st2 # ist bei mir Leer
quelle Datei
Code:
ID,stadt,vor,rio,golf,tom,URL,Bonn,titel,sta
2,"japn ",2016-02-12,2016-05-25,2016-03-12,0,"http://www.suse.de&a=25&b=3345&c=5504",3,15,0
Das mit dem Quellcode funktioniert irgendwie nicht

Edit (RM): Doch, tut es (wie man sehen kann)
 

Rain_Maker

Administrator
Teammitglied
Code:
ID,stadt,vor,rio,golf,tom,URL,Bonn,titel,sta
2,"japn ",2016-02-12,2016-05-25,2016-03-12,0,"http://www.suse.de&a=25&b=3345&c=5504",3,15,0
Tja, und damit wird die "Herausschnibbelei" einfacher, weil man sich nicht auf die normalen Kommata als Trennzeichen für awk stürzen muss.

Code:
2,"japn ",2016-02-12,2016-05-25,2016-03-12,0,"http://www.suse.de&a=25&b=3345&c=5504",3,15,0
Dann nimmt man eben die Anführungszeichen als Trenner.

Also:

Code:
grep http DATEINAME | awk -F '"' '{print $4}'

http://www.suse.de&a=25&b=3345&c=5504
Und fertich.

Greetz,

RM

P.S.

cut:

Code:
grep http DATEINAME | cut -d '"' -f4
und (etwas eleganter?!)

sed:

Code:
sed -n 's/.*"http/http/;s/".*//p' DATEINAME
 

amiga1200

Member
Vielen Dank für Deine Hilfe

irgendwie mag wget meinen String nicht

ich vermute:
Code:
st= grep http datei | awk -F ',' '{print $7}';
haut ein Umbruch mit rein, obwohl die datei sauber ist.
gebe ich aus:
Code:
echo $st
echo "weiter"
ist zwischen der url und weiter eine Leezeile
wenn ich die variable st direkt der url füttere ist alles gut mit wget
und bei echo auch keine leer Zeile
 

Rain_Maker

Administrator
Teammitglied
amiga1200 schrieb:
ich vermute:
st= grep http datei | awk -F ',' '{print $7}';
Du vermutest falsch.

Du willst nicht den Befehl sondern die _Ausgabe_ des Befehls als Variable haben.

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-5.html

Und nochmal, Variablen quoten, vor allem, wenn Steuerzeichen drin sind.

Und übrigens, ich schrieb, Du solltest bei Deinem Beispiel nicht die Sonderzeichen ändern, hast Du aber, diese Url
Code:
http://www.suse.de&a=25&b=3345&c=5504
wäre ungültig, diese hier nicht.

Code:
http://www.suse.de?a=25&b=3345&c=5504
Ohne die nötige Sorgfalt schießt man sich dann gerne mal selbst in Knie.

Greetz,

RM

P.S.

Code:
awk -F ',' '{print $7}'
Das hier gelesen?
 
Oben