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: