linux-l: Re: Suchen und Ersetzen ?
Guntram Trebs
gunni at mathematik.hu-berlin.de
So Mär 11 22:52:34 CET 2001
Hi Ralf,
On 11 Mar 2001, Ralf Cirksena wrote:
> On 2001-03-11 10:13 GMT, Lutz Lange wrote:
>
> > $ cat /etc/passwd | sed -e '3,$s/\/bin\bash/reject/'
>
> Useless use of cat (oder so).
>
> sed -s '3,$s/bin\/bash/reject/' < /etc/passwd > /tmp/passwd.tmp && \
> mv /tmp/passwd.tmp /etc/passwd
Die Option -s gibt es bei mir nicht.
Dabei sollte man beachten, dass /tmp/passwd.tmp nicht von anderen
Programmen benutzt wird, sonst gibts Datensalat ...
Das zurückschreiben war allerdings auch ein Zusatz gegenüber der
ursprünglichen Lösung.
Auf keinen Fall sollte man die beiden Lösungen zusammenschmeissen,
denn: "cat tmpfile | sed -e '...' > tmpfile" löscht tmpfile.
Was mir immer noch ein Rätsel bleibt:
Wozu ist das ganze eigentlich gut ???
Wahrscheinlich ist es doch besser, sich in einem geeigneten Editor
eine routine auf ein Tastenkürzel zu legen.
Im vim kann man das ganze wie folgt machen:
- mit ESC in den Kommando-Modus gehen
- V (gross !!!) drücken und dann zeilenweise mit Pfeiltasten
einen zu bearbeitenden Ausschnitt markieren
- : drücken, es erscheint ":'<,'>", was den Bereich darstellt, der
gerade ausgewählt ist.
- s drücken für substitute
- die Ersetzung eingeben, wie bei sed
- dabei darf man auch andere Zeichen, als / verwenden:
sed -e 's/x/y/g'
und
sed -e 's:x:y:g'
machen das gleiche !!!
- also insgesamt eingeben:
<ESC> V <Pfeiltastenfolge> :s_/bin/bash_reject_
- wenn man noch ein g ganz hinten ranhängt, wird nicht nur
das erste Vorkommen in einer Zeile ersetzt, sondern jedes.
( das sollte hier eigentlich das selbe sein, wenn man davon
ausgeht, dass niemand ein Homeverzeichnis der Art
/home/test/bin/bash/joke oder so ähnlich hat, oder einen
entsprechenden Namen )
Ich würde das g einfach anhängen.
guntram
Mehr Informationen über die Mailingliste linux-l