Problem mit sed und y///

03/09/2016 - 18:20 von Andreas Schmidt | Report spam

Hallo,

ich möchte in vielen Dateien in einer bestimmten Zeile alls
Großbuchstaben durch Kleinbuchstaben ersetzen. Mit tr geht das ganz
einfach:
***
$ echo "ASDF" | tr "A-Z" "a-z"
asdf
***

Für sed gibt es mit y/// einen àhnlichen Befehl, aber so richtig
zufrieden bin ich damit nicht:
***
$ echo "ASDF" | sed 'y/A-Z/a-z/'
aSDF
$ echo "ASDF" | sed 'y/[A-Z]/[a-z]/'
aSDF
$ echo "ASDF" | sed 'y/[:upper:]/[:lower:]/'
ASDF
$ echo "ASDF" | sed 'y/[[:upper:]]/[[:lower:]]/'
ASDF
***

So hingegen funktioniert es:
***
$ echo "ASDF" | sed
'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'
asdf
***

Beide Zeichensets auszuschreiben ist aber umstàndlich, anfàllig für
Tippfehler und schwer zu durchschauen. Gibt es nicht doch vielleicht
eine Möglichkeit, hier Bereichsangaben ("[A-Z]") oder Klassen
("[:upper:]") zu verwenden?

Schönen Gruß

Andreas


 

Lesen sie die antworten

#1 Rolf Reintjes
03/09/2016 - 19:00 | Warnen spam
On 03.09.2016 18:18, Andreas Schmidt wrote:
Hallo,

ich möchte in vielen Dateien in einer bestimmten Zeile alls
Großbuchstaben durch Kleinbuchstaben ersetzen. Mit tr geht das ganz
einfach:
***
$ echo "ASDF" | tr "A-Z" "a-z"
asdf
***

Für sed gibt es mit y/// einen àhnlichen Befehl, aber so richtig
zufrieden bin ich damit nicht:
***
$ echo "ASDF" | sed 'y/A-Z/a-z/'
aSDF
$ echo "ASDF" | sed 'y/[A-Z]/[a-z]/'
aSDF
$ echo "ASDF" | sed 'y/[:upper:]/[:lower:]/'
ASDF
$ echo "ASDF" | sed 'y/[[:upper:]]/[[:lower:]]/'
ASDF
***

So hingegen funktioniert es:
***
$ echo "ASDF" | sed
'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'
asdf
***

Beide Zeichensets auszuschreiben ist aber umstàndlich, anfàllig für
Tippfehler und schwer zu durchschauen. Gibt es nicht doch vielleicht
eine Möglichkeit, hier Bereichsangaben ("[A-Z]") oder Klassen
("[:upper:]") zu verwenden?



Ich glaube nicht.

Wenn Du auch awk verwenden darfst oder willst, dann sollte

$ echo "ASDF" | awk '{print tolower($0)}'

funktionieren.

Rolf

Ähnliche fragen