[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Problem mit sed und y///



Am Samstag, 3. September 2016, 18:51:18 CEST schrieb Rolf Reintjes:
> 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.

Sed´s y-Befehl kann offenbar keine Zeichenbereiche:

$ echo "BSDF" | sed 'y/A-Z/a-z/'
BSDF

$ echo "AZAZAZAZAZB" | sed 'y/A-Z/a-z/'
azazazazazB

Steht auch nix von Zeichenbereichen in der GNU sed-Anleitung:

https://www.gnu.org/software/sed/manual/sed.html#Other-Commands

Das schränkt den Anwendungsbereich der y-Befehls natürlich dementsprechend 
ein. Schade eigentlich.

Das hat mich nun selbst überrascht. :)

Ciao,
-- 
Martin


Reply to: