Zeichenkette umwandeln?

T

trainnee#1

Jungspund
Halli Hallo,

habe mich bezüglich meines Problems schon schlau gemacht, jedoch hat bisher keine der Möglichkeiten bei mir Funktioniert.

Also folgendes Problem:
Ich habe eine Datei in der ein Dateiname mit Version steh:
DATEINAME_version_1.2.3

Nun möchte ich den Dateiname ändern und zwar komplett in kleinbuchstaben:
dateiname_version_1.2.3

Habe bereits folgende Möglichkeiten probiert:
sed 's/DATEINAME/dateiname' datei1 > datei2

sed 's/DATEINAME/dateiname' datei1 > datei2 ; mv datei2 datei1

Leider war bisher immer die datei2 einfach leer.

Was mache ich falsch? Bin noch Neuling auf dem Gebiet deswegen wäre ne gute erklärung hilfreich ;)

Danke
 
sed 's/DATEINAME/dateiname' datei1 > datei2
In dieser Syntax bekomme ich die Fehlermeldung 'sed: -e expression #1, char 21: unterminated `s' command'. Behebe ich das Problem, indem ich nach 'dateiname' noch einen abschliessenden '/' anfuege, macht der Befehl, was man von ihm erwartet.
 
In dieser Syntax bekomme ich die Fehlermeldung 'sed: -e expression #1, char 21: unterminated `s' command'. Behebe ich das Problem, indem ich nach 'dateiname' noch einen abschliessenden '/' anfuege, macht der Befehl, was man von ihm erwartet.

Ja das fehlende '/' habe ich nur hier vergessen ... in dem Script steht es schon richtig dort ... der Befehl wird ja auch ausgeführt aber datei2 immernoch ohne jeglichen Inhalt?!

Ausserdem:
Muss ich ne neue Datei anlegen um den inhalt zu ändern?
Es würde auch reichen wenn in der datei1 die änderung vorgenommen wird und garkeine datei2 erstellt wird ...
 
Zuletzt bearbeitet:
Nein, Du musst keine Datei anlegen. Kannst Du ein paar Zeilen von dem Skript um die betreffende Stelle herum mitschicken? Vielleicht liegt der Fehler nicht direkt hier.

Klappt er bei Dir, wenn Du ihn direkt in einem Terminal eingibst?
GNU sed kennt auch die Option '-i', mit der die Zeichenkette direkt innerhalb der betreffenden Datei geaendert wird, so dass Du den Umweg mittels 'mv' nicht benoetigst - wenn der Befehl denn dann mal funktioniert.
 
Sry, aber das macht irgendwie überhaupt keinen Sinn. Wenn die "regex" der Substitution nicht matchen würde, wäre die Ausgabe einfach unverändert. Würde sie matchen, würde das Problem nicht wirklich existieren...

Geht der Befehl denn, wenn du einfach auf stdout schreiben lässt?
Welche shell benutzt du?
Gib mal die Ausgabe folgender Befehle an:
Code:
$0 --version     # shell version
sed --version    # drei mal darfst du raten

Wenn du einfach nur alle Großbuchstaben in Kleinbuchstaben umwandeln willst, geht das btw auch einfacher mit tr:
Code:
echo FOObAr|tr '[:upper:]' '[:lower:]'
 
Mist, jetzt wollte ich gerade "tr a-z A-Z" vorschlagen..

BTW: Ich find's genial, wie man hier immer wieder dazulernt, vor allem, dass die paar Befehle, die ich aus ABAP liebgewonnen habe im GNU/Linux meist dabei sind..
 
Danke für eure Antworten ... habe es nun mit dem tr befahl gemacht ;)
 

Ähnliche Themen

ersetzen in einem Rückgabestring eines vorher ausgeführten Programms

Xubuntu - AVR32-linux crosscompile sqlite

Überblick: Komprimierung und Dekomprimierung von tar/gz/bz2/zip

kernel aktualisieren von 2.4.22 auf 2.6.16

Zurück
Oben