(gelöst) sed und http://

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Hans-Wilhelm
Beiträge: 332
Registriert: 07.06.2007 20:01:12

(gelöst) sed und http://

Beitrag von Hans-Wilhelm » 06.11.2008 19:17:46

Ich möchte URLs in ein paar 100 Dateien tauschen. Also http://example.com gegen http://beispiel.de

Das Script was ich gebastelt habe funktioniert, aber nur mit

Code: Alles auswählen

  else
    sed -e 's/example.com/beispiel.de/g' "$i" > "$i.tmp" && mv -f "$i.tmp" "$i"
  fi
done
was in Ordnung ist, da ich URLs nur in links stehen habe.

Das hier

Code: Alles auswählen

  else
    sed -e 's/http://example.com/http://beispiel.de/g' "$i" > "$i.tmp" && mv -f "$i.tmp" "$i"
  fi
done
will wegen des http:// nicht.

Weiss jemand wie ich das realisiere? Ich denke mal das muss irgendwie "escaped" werden, Aber wie?
Zuletzt geändert von Hans-Wilhelm am 07.11.2008 14:42:57, insgesamt 1-mal geändert.

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: sed und http://

Beitrag von Spasswolf » 06.11.2008 19:26:30

1. Escapen mit \.
2. Wieso benutzt du nicht "sed -i"?

Hans-Wilhelm
Beiträge: 332
Registriert: 07.06.2007 20:01:12

Re: sed und http://

Beitrag von Hans-Wilhelm » 06.11.2008 19:36:15

Mit -i gab es irgend ein Handicap. Aber welches? Geht -i nicht durch Unterverzeichnise? :?:

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: sed und http://

Beitrag von rendegast » 06.11.2008 20:37:15

Zudem wird jedes Zeichen nach dem 's' als Trenner interpretiert, zBsp:

Code: Alles auswählen

sed 's@123@345@g;s|abc|cde|g'
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: sed und http://

Beitrag von Meillo » 07.11.2008 07:20:18

Hans-Wilhelm hat geschrieben:Das hier

Code: Alles auswählen

  else
    sed -e 's/http://example.com/http://beispiel.de/g' "$i" > "$i.tmp" && mv -f "$i.tmp" "$i"
  fi
done
will wegen des http:// nicht.

Weiss jemand wie ich das realisiere? Ich denke mal das muss irgendwie "escaped" werden, Aber wie?
Ja, du musst die Slashes escapen:

Code: Alles auswählen

  else
    sed -e 's/http:\/\/example.com/http:\/\/beispiel.de/g' "$i" > "$i.tmp" && mv -f "$i.tmp" "$i"
  fi
done
Oder besser, wie rendegast schon gesagt hat, einfach andere Trenner verwenden:

Code: Alles auswählen

  else
    sed -e 's@http://example.com@http://beispiel.de@g' "$i" > "$i.tmp" && mv -f "$i.tmp" "$i"
  fi
done

btw: da die Option `-i' nur von gsed unterstützt wird, nicht aber von anderen Implementierungen, ist es empfehlenswert sie nicht zu verwenden. Somit ist dein Vorgehen diesbezüglich richtig.
Use ed once in a while!

Hans-Wilhelm
Beiträge: 332
Registriert: 07.06.2007 20:01:12

Re: sed und http://

Beitrag von Hans-Wilhelm » 07.11.2008 14:42:32

Super. Danke für die Hilfe und Erklärungen! :D

Antworten