Was ist der Bash-Befehl, mit dem ich einen Großbuchstaben in Kleinbuchstaben und umgekehrt konvertieren kann?
Danke.
Was ist der Bash-Befehl, mit dem ich einen Großbuchstaben in Kleinbuchstaben und umgekehrt konvertieren kann?
Danke.
Antworten:
Wenn die Zeichenfolge bereits in einer Variablen gespeichert ist, können Sie die bash
Parametererweiterung verwenden ${parameter,,pattern}
(verfügbar seit Bash 4.0), wobei parameter
der Name Ihrer Variablen angegeben und pattern
weggelassen wird:
$ 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 verwenden zsh
, können Sie Parameter-Erweiterungsflags ( ${(FLAGS)NAME}
verfügbar seit zsh 2.5) verwenden, um die gleichen 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 schon viel länger hatte, sollte es wahrscheinlich sein: "Die zsh
Syntax funktioniert nicht inbash
.
${string,,}
Notation existiert nur für die Bash-Version 4+. Ansonsten ist eine der anderen Lösungen erforderlich, wie z $(echo $string | tr '[:upper:]' '[:lower:]')
.
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 funktioniert nicht :
$ 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 Parameter Expansion Arbeit :
$ 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 arbeitet :
$ 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 mit Unicode umgehen instruiert Werke :
$ 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Ą
gawk
als Standard awk (wie mit gezeigt update-alternatives --display awk
). Sind Sie sicher, dass mawk
der Standard in 13.10 ist?
sed
s haben seit 1990 die \U
Option unterstützt ;-). Kein spezielles Merkmal. Ansonsten tolle Antwort, so viele Möglichkeiten, so wenig Zeit ;-) Viel Glück an alle!
uc
funktioniert purse in Perl nicht, weil Sie use Encode
oder müssen use utf8
. Schreiben Sie Ihr Beispiel um echo "Idą gęsi łąką" | perl -ne 'use Encode;print encode("utf-8",uc(decode("utf-8",$_)))'
und es wird funktionieren. Siehe auch stackoverflow.com/a/13261662/3701431
Ich würde den internen Befehl " bash typeset" oder " declare" verwenden , um eine Variable in Kleinbuchstaben zu definieren.
$ 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 eingeben .
$ typeset -u ucase
$ ucase="Upper cAsE"
$ echo $ucase
UPPER CASE
Dies ist nicht spezifisch für die Bash-Shell, die auch für ksh funktioniert, möglicherweise in der POSIX-Shell-Definition.
EDIT: Viele Menschen sanft zeigte mir die Tatsache , dass typeset jetzt veraltet auf bash betrachtet und ersetzt durch declare . 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.
typeset
man eigentlich depricated und ersetzt durchdeclare
Sie können es mit dem tr
Befehl 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:
Kredit geht an Cybercity
tr A-Z a-z
funktioniert dies auch.
Es ist keine reine Bash-Lösung, aber Sie können Ihre Saiten durchpfeifen perl
(wie Oli es tat sed
):
$ echo lowercase | perl -ne 'print "\U$_"'
LOWERCASE
Und \L
wird den gegenteiligen Effekt haben:
$ echo UPPERCASE | perl -ne 'print "\L$_"'
uppercase
Verwenden Sie diesen einfachen Befehl Für Groß- und Kleinschreibung. Wobei 'f' der Dateiname ist, in den Sie konvertieren möchten.
tr "A-Z" "a-z" < f
Für Groß- und Kleinschreibung
tr "a-z" "A-Z" < f