大文字の文字列を小文字に、またはその逆に変換するために使用できるBashコマンドとは何ですか?
ありがとうございました。
大文字の文字列を小文字に、またはその逆に変換するために使用できるBashコマンドとは何ですか?
ありがとうございました。
回答:
文字列が既に変数に保存されている場合、具体的には(bash 4.0以降で使用bash
可能)のパラメーター展開を使用できます${parameter,,pattern}
。ここで、parameter
は変数の名前であり、pattern
省略されます。
$ string="Hello, World!"
$ echo $string
Hello, World!
$ echo ${string,,}
hello, world!
これは変数の値を変更せず、出力のみを変更することに注意してください。変数を変更するには、新しい値を割り当てる必要があります。
$ echo $string
Hello, World!
$ string=${string,,}
$ echo $string
hello, world!
大文字変換は以下で動作し${parameter^^pattern}
ます:
$ echo ${string^^}
HELLO, WORLD!
これはUnicode文字列でも動作します(少なくとも現在のbashバージョンでは、おそらく少なくともbash 4.3が必要です):
$ string='ἈΛΦΆβητος'
$ echo ${string,,}
ἀλφάβητος
$ echo ${string^^}
ἈΛΦΆΒΗΤΟΣ
を使用している場合はzsh
、パラメーター拡張フラグ(${(FLAGS)NAME}
; zsh 2.5以降で使用可能)を使用して同じ結果を得ることができます。bash
構文は次のとおりで動作しませんzsh
)1。小文字のフラグはL
;です。大文字の場合U
:
$ string="Hello, World!"
$ echo ${(L)string}
hello, world!
$ echo ${(U)string}
HELLO, WORLD!
$ echo $string
Hello, World!"
これはUnicode文字列でも動作します(少なくともzsh 5.0以降。以前のバージョンでは試しませんでした)。
$ string='ἈΛΦΆβητος'
$ echo ${(L)string}
ἀλφάβητος
$ echo ${(U)string}
ἈΛΦΆΒΗΤΟΣ
1) zshがこれをはるかに長く持っていたことを見ると、おそらく次のようになるはずです:「zsh
構文はで機能しませんbash
。
${string,,}
表記は、bashバージョン4+にのみ存在します。それ以外の場合は、などの他のソリューションのいずれかが必要です$(echo $string | tr '[:upper:]' '[:lower:]')
。
Unicodeで正しく機能するメソッドはほとんどありません。
GNU sed 4.2.2の動作:
$ echo "Idą gęsi łąką" | sed 's/.*/\U&/'
IDĄ GĘSI ŁĄKĄ
bash 4.2.45宣言が機能しません:
$ typeset -u ucase; ucase="Idą gęsi łąką"; echo $ucase
IDą GęSI łąKą
bash 4.2.45パラメーターの展開が機能しない:
$ str="Idą gęsi łąką"; echo ${str^^}
IDą GęSI łąKą
bash 4.3.42 declare
およびパラメーター拡張の動作:
$ declare -u ucase
$ ucase="Idą gęsi łąką"
$ echo $ucase
IDĄ GĘSI ŁĄKĄ
$ echo ${ucase,,}
idą gęsi łąką
GNU tr 8.20は機能しません:
$ echo "Idą gęsi łąką" | tr '[:lower:]' '[:upper:]'
IDą GęSI łąKą
mawk(Ubuntu 13.10のデフォルトawk)は機能しません:
$ echo "Idą gęsi łąką" | mawk '{print toupper($0)}'
IDą GęSI łąKą
gawkの動作:
$ echo "Idą gęsi łąką" | gawk '{print toupper($0)}'
IDĄ GĘSI ŁĄKĄ
Perl pure uc()は機能しません:
$ echo "Idą gęsi łąką" | perl -ne 'print uc($_);'
IDą GęSI łąKą
UnicodeヒントのないPython 2は機能しません。
$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().upper(),'
IDą GęSI łąKą
Unicodeの動作を処理するように指示されたPython 2 :
$ echo "Idą gęsi łąką" | python -c 'import sys; print sys.stdin.read().decode("utf-8").upper(),'
IDĄ GĘSI ŁĄKĄ
Python 3の動作:
$ echo "Idą gęsi łąką" | python3 -c 'import sys; print(sys.stdin.read().upper(), end="")'
IDĄ GĘSI ŁĄKĄ
gawk
、デフォルトのawkがあります(をupdate-alternatives --display awk
参照)。mawk
13.10のデフォルトは確かですか?
sed
s 1990年以降、\U
オプションがサポートされています;-)。gnu-sed固有の機能ではありません。それ以外の場合、素晴らしい答え、非常に多くのオプション、非常に短い時間;-)すべてに幸運を!
uc
あなたがする必要があるため、Perlでは動作しませんuse Encode
か use utf8
。サンプルを次のように書き換えると、 echo "Idą gęsi łąką" | perl -ne 'use Encode;print encode("utf-8",uc(decode("utf-8",$_)))'
動作します。stackoverflow.com/a/13261662/3701431
小文字の変数を定義するには、bashの内部タイプセットまたは宣言コマンドを使用します。
$ typeset -l lcase
$ lcase="LoWeR cAsE"
$ echo $lcase
lower case
変数をタイプセットするときではなく、値が設定されるときに文字が下げられます。そのため、スクリプトの最初にタイプセットすることをお勧めします。大文字の場合、-uをタイプセットできます。
$ typeset -u ucase
$ ucase="Upper cAsE"
$ echo $ucase
UPPER CASE
これは、bshシェルに固有のものではなく、kshでも機能します。POSIXシェル定義の場合もあります。
編集:多くの人々は、タイプセットがbashでは廃止され、declareに置き換えられたという事実を優しく指摘してくれました。両方のコマンドは同等です。
$ 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.
異種環境で作業するとき、私自身はまだタイプセット構文を使用しているので、スクリプトを書き直す必要はありません。
typeset
により廃止予定とみなされ、交換されるdeclare
この単純なコマンドを使用します。大文字から小文字の場合「f」は、変換を行うファイル名です。
tr "A-Z" "a-z" < f
小文字から大文字の場合
tr "a-z" "A-Z" < f