Hallo,
ich möchte eine Datei in einem Script bearbeiten. Ich greppe die Datei um alle relevanten Zeilen zu erhalten. Jede dieser Zeilen beginnt mit FileX=http...(das X ist eine ein oder mehrstellige Zahl). Ich möchte nun mit sed alles vor dem http löschen. Leider hab ich keine Ahnung, wie ich das anstellen kann. Die Manpage und ein halbes Dutzend Tutorials im Internet halfen mir nicht weiter.
Hat vieleicht jemand den entscheidenden Tip?
Vielen Dank im Vorraus.
MfG Michael
Am 20.01.04 schrieb Michael Gruetzner:
ich möchte eine Datei in einem Script bearbeiten. Ich greppe die Datei um alle relevanten Zeilen zu erhalten. Jede dieser Zeilen beginnt mit FileX=http...(das X ist eine ein oder mehrstellige Zahl). Ich möchte nun mit sed alles vor dem http löschen. Leider hab ich keine Ahnung, wie ich das anstellen kann. Die Manpage und ein halbes Dutzend Tutorials im Internet halfen mir nicht weiter.
Warum schwierig, wenn es auch einfach geht? :)
cut -f"2-" -d"=" deine_datei
MfG, Jonas
Hallo,
das ist genau das, was ich suche. Vielen Dank für die schnelle Antwort.
MfG Michael
On Tue, Jan 20, 2004 at 08:52:19PM +0100, Jonas Witt wrote:
Am 20.01.04 schrieb Michael Gruetzner:
ich möchte eine Datei in einem Script bearbeiten. Ich greppe die Datei um alle relevanten Zeilen zu erhalten. Jede dieser Zeilen beginnt mit FileX=http...(das X ist eine ein oder mehrstellige Zahl). Ich möchte nun mit sed alles vor dem http löschen. Leider hab ich keine Ahnung, wie ich das anstellen kann. Die Manpage und ein halbes Dutzend Tutorials im Internet halfen mir nicht weiter.
Warum schwierig, wenn es auch einfach geht? :)
cut -f"2-" -d"=" deine_datei
MfG, Jonas
-- Jonas Witt wittj@gmx.net GnuPG: B5565CE5 | 41EC A65D C8FF A467 D897 8BD6 B6F9 3D02 B556 5CE5
Hi Jonas,
On Tue, Jan 20, 2004 at 20:52:19 +0100, Jonas Witt wrote:
FileX=http...(das X ist eine ein oder mehrstellige Zahl). Ich m?chte nun mit sed alles vor dem http l?schen. Leider hab ich
Warum schwierig, wenn es auch einfach geht? :)
cut -f"2-" -d"=" deine_datei
...und hier noch die "komplizierte" Loesung:
sed 's/^File[0-9]+=//' deine_datei
bye, Chris
On Tue, Jan 20, 2004 at 10:58:30PM +0100, Christian Perle wrote:
FileX=http...(das X ist eine ein oder mehrstellige Zahl). Ich m?chte nun mit sed alles vor dem http l?schen. Leider hab ich
Warum schwierig, wenn es auch einfach geht? :)
cut -f"2-" -d"=" deine_datei
...und hier noch die "komplizierte" Loesung:
sed 's/^File[0-9]+=//' deine_datei
Zur Erklärung für Michael:
Zeichen | matcht_auf ------------------------ ^ | Zeilenanfang File | 'File' [0-9] | /mindestens/ eine Ziffer = | '='
Wird diese Zeichenfolge gefunden, wird sie weggeschmissen (mit einer leeren Zeichenfolge ersetzt), alle anderen Zeichenfolgen werden durchgelassen (sed ist ein Filter).
cut mag zwar laufzeiteffizienter sein (regexps sind relativ teuer), aber Christians Lösung ist näher am Kontext, da nicht nur auf das '=' gemätscht wird, sondern auch das 'FileX' mit einbezogen wird. Warum erwähne ich das? Weil vielleicht irgendwann später jemandem einfällt in die Datei Kommentarzeilen einzubauen und irgendwann enthält eine solche auch mal ein '='...
Ich ergänze das Quoting hier mal um Stefans Lösung:
On Tue, 20 Jan 2004 23:35:03 +0100, Stefan Lagotzki wrote:
Wobei es mit awk auch sehr anschaulich funktioniert :-)
awk -F'=' '{print $2}' dateiname
Test mit Deinem Beispiel:
echo "FileX=http://lug-dd.schlittermann.de" | awk -F'=' '{print $2}' ergibt http://lug-dd.schlittermann.de
Gedankenspiel:
File7=http://lug-dd.schlittermann.de options=X visit=daily
Advocatus Diaboli aka Eric ;-)
Am 21.01.04 schrieb Eric Schaefer:
cut mag zwar laufzeiteffizienter sein (regexps sind relativ teuer), aber Christians Lösung ist näher am Kontext, da nicht nur auf das '=' gemätscht wird, sondern auch das 'FileX' mit einbezogen wird. Warum erwähne ich das? Weil vielleicht irgendwann später jemandem einfällt in die Datei Kommentarzeilen einzubauen und irgendwann enthält eine solche auch mal ein '='...
Kommentare kann man ja vorher noch rausgrepen.
Gedankenspiel:
File7=http://lug-dd.schlittermann.de options=X visit=daily
Da ist meine Lösung dann wieder besser. :)
MfG, Jonas
Hi Eric,
wenn wir schon beim Korinthenkacken sind ;)
On Wed, Jan 21, 2004 at 00:36:38 +0100, Eric Schaefer wrote:
[0-9] | /mindestens/ eine Ziffer
[0-9] matcht auf /genau/ eine Ziffer. Das Pluszeichen hinter der Zeichenmenge sorgt dafuer, dass es eins oder mehrere Zeichen aus dieser Menge sein duerfen. Ausserdem muss man das Pluszeichen in sed quoten, also einen "" voranstellen, damit es als Wiederholungszeichen interpretiert wird.
Korrigiert heisst es also:
[0-9]+ | /mindestens/ eine Ziffer
bye, Chris
On Wed, Jan 21, 2004 at 04:36:38PM +0100, Christian Perle wrote:
wenn wir schon beim Korinthenkacken sind ;)
Ich wollte nicht Korithenkacken, der OP hat nur offensichtlich versucht zu lernen und das wollte ich entsprechend unterstützen.
On Wed, Jan 21, 2004 at 00:36:38 +0100, Eric Schaefer wrote:
[0-9] | /mindestens/ eine Ziffer
[0-9] matcht auf /genau/ eine Ziffer. Das Pluszeichen hinter der Zeichenmenge sorgt dafuer, dass es eins oder mehrere Zeichen aus dieser Menge sein duerfen. Ausserdem muss man das Pluszeichen in sed quoten, also einen "" voranstellen, damit es als Wiederholungszeichen interpretiert wird.
Korrigiert heisst es also:
[0-9]+ | /mindestens/ eine Ziffer
Ja. Das + war schon drin, ist beim nacheditieren aber irgendwie runtergefallen.
Eric
Michael Gruetzner wrote:
Hallo,
ich möchte eine Datei in einem Script bearbeiten. Ich greppe die Datei um alle relevanten Zeilen zu erhalten. Jede dieser Zeilen beginnt mit FileX=http...(das X ist eine ein oder mehrstellige Zahl).
Wobei es mit awk auch sehr anschaulich funktioniert :-)
awk -F'=' '{print $2}' dateiname
Test mit Deinem Beispiel:
echo "FileX=http://lug-dd.schlittermann.de" | awk -F'=' '{print $2}' ergibt http://lug-dd.schlittermann.de
Stefan
.
On Tue, Jan 20, 2004 at 11:35:03PM +0100, Stefan Lagotzki wrote:
Wobei es mit awk auch sehr anschaulich funktioniert :-)
aber wenn, dann bitte richtig
awk -F'=' '{print $2}' dateiname
awk -F '=' '/^File.*=http/ {print $2}' dateiname das erspart das grep.
Test mit Deinem Beispiel:
echo "FileX=http://lug-dd.schlittermann.de" | awk -F'=' '{print $2}' ergibt http://lug-dd.schlittermann.de
und was passiert bei "File1=http://www.hirnfurz.de/index.pl?blub=bla%22? So einfach ist es nicht. ;-)
On 20.01.04 Stefan Lagotzki (lago20@gmx.de) wrote:
Michael Gruetzner wrote:
Hallo,
ich möchte eine Datei in einem Script bearbeiten. Ich greppe die Datei um alle relevanten Zeilen zu erhalten. Jede dieser Zeilen beginnt mit FileX=http...(das X ist eine ein oder mehrstellige Zahl).
Wobei es mit awk auch sehr anschaulich funktioniert :-)
awk -F'=' '{print $2}' dateiname
Ich habs geahnt. Noch jemand 'ne Lösung in python?
H.
On Tue, Jan 20, 2004 at 08:39:46PM +0100, Michael Gruetzner wrote:
ich möchte eine Datei in einem Script bearbeiten. Ich greppe die Datei um alle relevanten Zeilen zu erhalten. Jede dieser Zeilen beginnt mit FileX=http...(das X ist eine ein oder mehrstellige Zahl).
sed 's/File[[:digit:]]+=//
Heiko
Moin.
Ich habe eine Textdatei und möchte die ersten beiden Zeilen löschen, um sie anschließend mit awk weiterzuverarbeiten. Versucht habe ich sed -e '/1,2/d' datei und eine ganze Menge Variationen. Allerdings war die richtige leider noch nicht dabei. Habe ich bei der Adressenangabe was falsch gemacht?
MfG
Carsten
Torsten,
Am 25. Januar 2004 schrieb Carsten Friede:
Ich habe eine Textdatei und möchte die ersten beiden Zeilen löschen, um sie anschließend mit awk weiterzuverarbeiten.
Warum dann nicht gleich nur awk (oder nur sed)?
Versucht habe ich sed -e '/1,2/d' datei und eine ganze Menge Variationen. Allerdings war die richtige leider noch nicht dabei. Habe ich bei der Adressenangabe was falsch gemacht?
sed -e '1,2d'
Torsten
Torsten Werner wrote:
Warum dann nicht gleich nur awk (oder nur sed)?
Man will ja auch was lernen. ;-)
sed -e '1,2d'
Danke. Funktioniert. Die Beschreibung im Handbuch war irgendwie nicht sehr hilfreich.
Carsten
Carsten Friede wrote:
Moin.
Ich habe eine Textdatei und möchte die ersten beiden Zeilen löschen, um sie anschließend mit awk weiterzuverarbeiten.
Ergaenzung zu Torstens Mail: in awk waere die Bedingung NR>2 und dann bekommst Du auch alles ab Zeile 3.
Stefan
.
Hi Carsten,
On Sun, Jan 25, 2004 at 21:28:37 +0100, Carsten Friede wrote:
Ich habe eine Textdatei und m?chte die ersten beiden Zeilen l?schen, um sie anschlie?end mit awk weiterzuverarbeiten. Versucht habe ich sed -e '/1,2/d' datei und eine ganze Menge
Fuer sowas brauchst Du gar kein sed, da reicht tail:
tail +3 filename
bye, Chris
On 25.01.04 Carsten Friede (cfriede@wh12.tu-dresden.de) wrote:
Moin,
Ich habe eine Textdatei und möchte die ersten beiden Zeilen löschen, um sie anschließend mit awk weiterzuverarbeiten.
more +3 filename ?
H.
lug-dd@mailman.schlittermann.de