LinuxののBash shellから文字列を切る方法を紹介します。
1. 特定の範囲の文字列を切り捨てる
次のようなSyntaxで特定のIndexの範囲の文字列をカットすることができます。 offsetは、文字列が始まるindexを入力し、lengthはoffsetから切りたい長さを入力します。
echo "${STR:offset:length}"次のコードは、Index 0から5つの文字まで切って str変数に格納します。
#!/bin/bash
str="Hello, World, Bash!"
echo "${str:0:5}"Output:
$ bash example.sh
Hello1.1 特定範囲の文字列の切り捨て(2)
次のようにlengthを入力しないとoffsetから文字列まで切り捨てられます。
#!/bin/bash
str="Hello, World, Bash!"
echo "${str:7}"Output:
$ bash example.sh
World, Bash!1.2 文字列の後ろから切り抜く
次のようにoffsetを負に設定すると、文字列の後ろからoffsetを計算します。 str変数のoffset -5はBの位置になります。そしてlengthを入力していないので、文字列最後まで切り捨てられます。
#!/bin/bash
str="Hello, World, Bash!"
echo "${str:(-5)}"Output:
$ bash example.sh
Bash!lengthを入力すると、offsetで入力した長さだけの文字列を切り捨てます。
#!/bin/bash
str="Hello, World, Bash!"
echo "${str:(-5):2}"Output:
$ bash example.sh
Bash!2. cut命令で文字列を切り捨てる
2.1文字1個抽出
cut -c 8は、文字列で8番目の文字をカットします。
#!/bin/bash
str="Hello, World, Bash!"
echo $str | cut -c 8Output:
$ bash example.sh
Wもし cut -c 8,12ように入力すれば、8番目と12番目の文字が抽出されます。
#!/bin/bash
str="Hello, World, Bash!"
echo $str | cut -c 8,12Output:
$ bash example.sh
Wd2.2 特定の範囲の文字列の切り捨て
cutに設定した範囲の文字列を抽出することができます。 cut -c Start-Endよう切りたい文字列の範囲を指定することができます。注意するのは、文字列のOffsetは1から始まります。
次の例では、 cut -c 8-12は8番目から12番までの文字列を切り捨てます。
#!/bin/bash
str="Hello, World, Bash!"
echo $str | cut -c 8-12Output:
$ bash example.sh
World2.3 範囲指定時、文字列終了範囲省略
次のように文字列の末尾の範囲を指定しない場合は、文字列最後まで切り捨てられます。
#!/bin/bash
str="Hello, World, Bash!"
echo $str | cut -c 8-Output:
$ bash example.sh
World, Bash!2.4 範囲指定時、文字列開始範囲省略
次のように文字列の開始範囲を指定しない場合、文字列の最初のから最後の範囲までカットします。
#!/bin/bash
str="Hello, World, Bash!"
echo $str | cut -c -5Output:
$ bash example.sh
Hello3. パターンで特定の文字列を切り取る
文字列内のパターンを探して、その文字を削除することができます。文字列に基づいて短く一致するパターンがあり、長く一致するパターンがありますが、コマンドに応じて任意のパターンを削除するかを決定することができます。
3.1 最初の文字列を含む、最も短く一致する文字列を削除する
${STR#PATTERN}はSTR変数の文字列の中に、最初の文字列を含み、パターンに一致する文字列を検索します。その中で最も短く一致するパターンを削除します。
次の例の文字列で A*Bパターンを見つけた場合は、AAABが最も短く一致するパターンであり、 AAABBBが最も長く一致するパターンです。実行結果を見れば最も短く一致する文字列が削除されます。
#!/bin/bash
str="AAABBBCCC"
echo ${str#A*B}Output:
$ bash example.sh
BBCCC3.2 最初の文字列を含む、最も長く一致する文字列を削除する
${STR##PATTERN}はSTR変数の文字列の中に、最初の文字列を含むパターンと一致する文字列を検索します。その中で最も長く一致するパターンを削除します。
次の例の文字列で A*Bパターンを見つけた場合は、AAABが最も短く一致するパターンであり、 AAABBBが最も長く一致するパターンです。実行結果を見れば、最も長く一致する文字列が削除されます。
#!/bin/bash
str="AAABBBCCC"
echo ${str##A*B}Output:
$ bash example.sh
CCC3.3 最後の文字列を含む、最も短く一致する文字列の削除
${STR%PATTERN}はSTR変数の文字列の中に、最後の文字列を含むパターンと一致する文字列を検索します。その中で最も短く一致するパターンを削除します。
次の例の文字列で B*Cパターンを見つけた場合は、BCCCが最も短く一致するパターンであり、 BBBCCCが最も長く一致するパターンです。実行結果を見れば最も短く一致する文字列が削除されます。
#!/bin/bash
str="AAABBBCCC"
echo ${str%B*C}Output:
$ bash example.sh
AAABB3.4 最後の文字列を含む、最も長く一致する文字列の削除
${STR%%PATTERN}はSTR変数の文字列の中に、最後の文字列を含むパターンと一致する文字列を検索します。その中で最も長く一致するパターンを削除します。
次の例の文字列で B*Cパターンを見つけた場合は、BCCCが最も短く一致するパターンであり、 BBBCCCが最も長く一致するパターンです。実行結果を見れば、最も長く一致する文字列が削除されます。
#!/bin/bash
str="AAABBBCCC"
echo ${str%%B*C}Output:
$ bash example.sh
AAA4. 特定の文字に文字列を分割する
cutコマンドを使用するときに区切り文字を指定することができ、その区切りを基準に文字列を分割することができます。
cut -d : -f1は、文字列で に基づいて、文字列を分離し、分離された文字列の中の最初の文字列を strに保存します。もし第二の分離された文字列を取得したい場合 -f2と指定します。
#!/bin/bash
str="Hello:World:Bash"
echo $str | cut -d ':' -f1
echo $str | cut -d ':' -f2
echo $str | cut -d ':' -f3Output:
$ bash example.sh
Hello
World
BashReferences
Related Posts
- Bash Shell - 文字列の出力方法(echo, printf)
- Bash Shell - 数値比較演算子
- Bash Shell - 変数が定義されているかどうかを確認する方法
- Bash Shell - スリープ関数、特定の時間を停止する
- Bash Shell - 文字列 切り出し(substring、split)
- Bash Shell - 日付、時刻を取得する
- Bash Shell - 文字列を連結する方法
- Bash Shell - ファイルの生成と文字列の追加
- Bash Shell - 文字列比較、文字列が含まれているかどうかを確認する
- Bash Shell - 条件文(if-else)
- Bash Shell - 数値演算(プラス、マイナス、乗算、除算)