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