it-swarm.com.de

Befehl zum Konvertieren einer Zeichenfolge in Kleinbuchstaben?

Was ist der Bash-Befehl, mit dem ich einen Großbuchstaben in Kleinbuchstaben und umgekehrt konvertieren kann?

Danke.

47
rɑːdʒɑ

Wenn der String bereits in einer Variablen gespeichert ist, können Sie die Parametererweiterung von bash verwenden, insbesondere ${parameter,,pattern} (verfügbar seit Bash 4.0), wobei parameter der Name Ihrer Variablen und pattern ist nicht angegeben:

$ string="Hello, World!"
$ echo $string
Hello, World!
$ echo ${string,,}
hello, world!

Beachten Sie, dass dies nicht den Wert der Variablen ändert, sondern nur die Ausgabe. Um die Variable zu ändern, müssen Sie den neuen Wert zuweisen:

$ echo $string
Hello, World!
$ string=${string,,}
$ echo $string
hello, world!

Die Konvertierung in Großbuchstaben funktioniert mit ${parameter^^pattern}:

$ echo ${string^^}
HELLO, WORLD!

Dies funktioniert auch mit Unicode-Strings (mindestens mit aktuellen Bash-Versionen, benötigt wahrscheinlich mindestens Bash 4.3):

$ string='ἈΛΦΆβητος'
$ echo ${string,,}
ἀλφάβητος
$ echo ${string^^}
ἈΛΦΆΒΗΤΟΣ

Wenn Sie zsh verwenden, können Sie Parameter Expansion Flags (${(FLAGS)NAME}; verfügbar seit zsh 2.5) verwenden, um dieselben Ergebnisse zu erzielen. Die bash -Syntax funktioniert nicht in zsh 1). Das Flag für Kleinbuchstaben ist L; für Großbuchstaben ist es U:

$ string="Hello, World!"
$ echo ${(L)string}
hello, world!
$ echo ${(U)string}
HELLO, WORLD!
$ echo $string
Hello, World!"

Dies funktioniert auch mit Unicode-Strings (spätestens seit zsh 5.0; ich habe es nicht mit früheren Versionen versucht):

$ string='ἈΛΦΆβητος'
$ echo ${(L)string} 
ἀλφάβητος
$ echo ${(U)string}  
ἈΛΦΆΒΗΤΟΣ


1) Obwohl, da zsh dies weitaus länger hatte, sollte es wahrscheinlich sein: "Die zsh -Syntax funktioniert nicht in bash.

59
Adaephon

Es gibt nur sehr wenige Methoden, die mit Unicode korrekt funktionieren:

GNU sed 4.2.2 funktioniert:

$ echo "Idą gęsi łąką" | sed 's/.*/\U&/'
IDĄ GĘSI ŁĄKĄ

bash 4.2.45 declare does not work:

$ typeset -u ucase; ucase="Idą gęsi łąką"; echo $ucase
IDą GęSI łąKą

bash 4.2.45 Parametererweiterung funktioniert nicht

$ str="Idą gęsi łąką"; echo ${str^^}
IDą GęSI łąKą

bash 4.3.42 declare und Parametererweiterung work:

$ declare -u ucase
$ ucase="Idą gęsi łąką"
$ echo $ucase
IDĄ GĘSI ŁĄKĄ
$ echo ${ucase,,}
idą gęsi łąką

GNU tr 8.20 funktioniert nicht

$ echo "Idą gęsi łąką" | tr '[:lower:]' '[:upper:]'
IDą GęSI łąKą

mawk (Standard awk in Ubuntu 13.10) funktioniert nicht

$ echo "Idą gęsi łąką" | mawk '{print toupper($0)}'
IDą GęSI łąKą

gawk funktioniert:

$ echo "Idą gęsi łąką" | gawk '{print toupper($0)}'
IDĄ GĘSI ŁĄKĄ

Perl pure uc () funktioniert nicht

$ echo "Idą gęsi łąką" | Perl -ne 'print uc($_);'
IDą GęSI łąKą

Python 2 ohne Unicode-Hinweise funktioniert nicht:

$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().upper(),'
IDą GęSI łąKą

Python 2, wenn Sie angewiesen werden, mit Unicode umzugehen funktioniert:

$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().decode("utf-8").upper(),'
IDĄ GĘSI ŁĄKĄ

Python 3 funktioniert:

$ echo "Idą gęsi łąką" | python3 -c 'import sys; print(sys.stdin.read().upper(), end="")'
IDĄ GĘSI ŁĄKĄ
40
Michał Šrajer

Ich würde den internen Typensatz oder Befehl declare verwenden, um Kleinbuchstaben zu definieren Variable.

$ typeset -l lcase
$ lcase="LoWeR cAsE"
$ echo $lcase
lower case

Die Zeichen werden verringert, wenn der Wert festgelegt wird, und nicht, wenn Sie die Variable festlegen. Es ist also besser, am Anfang des Skripts zu setzen. Für Großbuchstaben können Sie -u setzen.

$ typeset -u ucase
$ ucase="Upper cAsE"
$ echo $ucase
UPPER CASE

Dies ist nicht spezifisch für die Bash-Shell, die auch unter ksh funktioniert, möglicherweise in der POSIX-Shell-Definition.

BEARBEITEN: Viele Leute wiesen mich sanft darauf hin, dass Schriftsatz jetzt als veraltet gilt und durch deklarieren . Beide Befehle sind gleichwertig.

$ help typeset
typeset: typeset [-aAfFgilrtux] [-p] name[=value] ...
    Set variable values and attributes.

    Obsolete.  See `help declare'.


$ help declare
declare: declare [-aAfFgilrtux] [-p] [name[=value] ...]
    Set variable values and attributes.

Ich selbst verwende immer noch die Schriftsatzsyntax, wenn ich in einer heterogenen Umgebung arbeite, sodass ich meine Skripte nicht umschreiben muss.

20
Emmanuel

Sie können dies mit dem Befehl tr tun.

Im Terminal (Ctrl+Alt+T)

Dieser Befehl:

echo 'String here' | tr "[:lower:]" "[:upper:]"

wandelt Kleinbuchstaben in Großbuchstaben um.

echo 'STRING HERE' | tr "[:upper:]" "[:lower:]"

wandelt Großbuchstaben in Kleinbuchstaben um.

Beispiel:

enter image description here

Gutschrift geht an Cybercity

17
rɑːdʒɑ

Sie können Dinge auch durch sed leiten:

$ echo lowercase | sed 's/.*/\U&/'
LOWERCASE

Und \L hat den gegenteiligen Effekt:

$ echo UPPERCASE | sed 's/.*/\L&/'
uppercase
9
Oli

Es ist keine reine Bash-Lösung, aber Sie können Ihre Saiten durch Perl leiten (wie Oli mit sed):

$ echo lowercase | Perl -ne 'print "\U$_"'
LOWERCASE

Und \L hat den gegenteiligen Effekt:

$ echo UPPERCASE | Perl -ne 'print "\L$_"'
uppercase
1
Sylvain Pineau