sed - aber wie?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
bongout
Beiträge: 217
Registriert: 15.08.2003 13:02:23
Kontaktdaten:

sed - aber wie?

Beitrag von bongout » 09.04.2006 19:38:25

sorry - super Anfängerfrage :-(

Ich möchte gern ein paar config Dateien automatisch anpassen. I.d.R. soll dann vor oder nach einer bestimmten Stelle was eingefügt werden.

text am Ende der Datei einfügen soll wohl leicht mit

Code: Alles auswählen

echo text > datei
gehen.

Wie kann ich aber in meier Datei test.config den Ausdruck xyz suchen und dann davor/danach meinen "Text" einfügen?

(ich weiß, lesen würde helfen, aber ich hoffe dass mir hier jemand sagen kann wie's geht ohne dass ich die ganze bash.Bibel lernen muss....)

aspettl
Beiträge: 318
Registriert: 15.02.2006 22:05:37
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Beitrag von aspettl » 09.04.2006 19:42:16

http://www.tu-harburg.de/rzt/tuinfo/obe ... ode52.html
Da hat es ein Beispiel genau für deinen Fall :-)

Gruß
Aaron

Benutzeravatar
ScyTheMan
Beiträge: 363
Registriert: 23.10.2004 15:09:14
Lizenz eigener Beiträge: GNU Free Documentation License

Re: sed - aber wie?

Beitrag von ScyTheMan » 09.04.2006 19:47:54

bongout hat geschrieben:text am Ende der Datei einfügen soll wohl leicht mit

Code: Alles auswählen

echo text > datei
gehen.
Nö, damit überschreibst du die Datei. Anhängen wäre >> :)

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 09.04.2006 20:19:09

Hallo bongout,

Code: Alles auswählen

fuzzy@sid:/tmp$ cat datei
textanfang

  xyz

textende
fuzzy@sid:/tmp$ sed 's/xyz/xyz # und danach Kommentare/' datei > datei-text
fuzzy@sid:/tmp$ cat datei-text
textanfang

  xyz # und danach Kommentare

textende

Code: Alles auswählen

fuzzy@sid:/tmp$ sed -i 's/xyz/abc bis xyz/' datei
fuzzy@sid:/tmp$ cat datei
textanfang

  abc bis xyz

textende
das sind zwei kleine unvollständige Beispiele :wink:

Linktipp:
http://www.linuxfibel.de/kapitel7.htm

...und es erleichtert die Sache mit kleinen Beispielen von DIr,
am besten mit Vorher/Nachher "Wünschen" und Deinen Versuchen.

Gruß fuzzy

Benutzeravatar
bongout
Beiträge: 217
Registriert: 15.08.2003 13:02:23
Kontaktdaten:

dankeschön....

Beitrag von bongout » 10.04.2006 12:17:44

Hi Fuzzy,

Ein hoch auf Debianforum.... :-)

Nach dem Link von aspettl ist mein erstes Problem wohl gelöst (muss es nur noch heute abend ausprobieren:

Code: Alles auswählen

user:cat test

bla bla bla

exit


user: mv test test.old

user: sed /exit/ i\ 
#Kommentar\ 
Änderung1\
Änderung2\ 
#Kommentar test.old > test


user:cat test

bla bla bla

#Kommentar
Änderung1
Änderung2 
#Kommentar 
exit


Also wie gesagt - bisher nur theoretische Rekapitulation des erlernten :-)


Dank Deiner Beispiele hab' dann wohl auch mein anderees Problem gelöst...

Code: Alles auswählen

user: cat datei

text=bla1, bla2, bla3


user: mv datei datei.old

user: sed 's/^text/text=/' datei.old > datei

user: cat datei

text=
Soweit alles ok?

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 10.04.2006 15:03:41

@bong...

- es wäre sehr hilfreich wenn du eine file unter NoPaste stellen könntest und das dafor und danach erwähnen würdest
- die von fuzzy erwähnte "inplace" ersetzung ist sicher die beste Wahl, da du dir ein umbenennen des files ersparst
- zusätzlich würde ich evtl. noch die option globales ersetzen wählen

das sieht dann alles so aus:

Code: Alles auswählen

markusgattol@pc1:/tmp$ echo -e "one \n two \n   three three" > file && echo "four" >> file && cat file
one
 two
   three three
four
markusgattol@pc1:/tmp$ sed -i 's/three/three_with_a_shot_bourbon/' file && cat file
one
 two
   three_with_a_shot_bourbon three
four
markusgattol@pc1:/tmp$ sed -i 's/three/three_with_a_shot_bourbon/g' file && cat file
one
 two
   three_with_a_shot_bourbon_with_a_shot_bourbon three_with_a_shot_bourbon
four
markusgattol@pc1:/tmp$
wohingegen

Code: Alles auswählen

markusgattol@pc1:/tmp$ echo -e "one \n two \n   three three" > file && echo "four" >> file && cat file
one
 two
   three three
four
markusgattol@pc1:/tmp$ sed -i 's/three/four_with_a_shot_bourbon/g' file && cat file
one
 two
   four_with_a_shot_bourbon four_with_a_shot_bourbon
four
markusgattol@pc1:/tmp$

markus

Antworten