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
Hello
1.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 8
Output:
$ bash example.sh
W
もし cut -c 8,12
ように入力すれば、8番目と12番目の文字が抽出されます。
#!/bin/bash
str="Hello, World, Bash!"
echo $str | cut -c 8,12
Output:
$ bash example.sh
Wd
2.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-12
Output:
$ bash example.sh
World
2.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 -5
Output:
$ bash example.sh
Hello
3. パターンで特定の文字列を切り取る
文字列内のパターンを探して、その文字を削除することができます。文字列に基づいて短く一致するパターンがあり、長く一致するパターンがありますが、コマンドに応じて任意のパターンを削除するかを決定することができます。
3.1 最初の文字列を含む、最も短く一致する文字列を削除する
${STR#PATTERN}
はSTR変数の文字列の中に、最初の文字列を含み、パターンに一致する文字列を検索します。その中で最も短く一致するパターンを削除します。
次の例の文字列で A*B
パターンを見つけた場合は、AAAB
が最も短く一致するパターンであり、 AAABBB
が最も長く一致するパターンです。実行結果を見れば最も短く一致する文字列が削除されます。
#!/bin/bash
str="AAABBBCCC"
echo ${str#A*B}
Output:
$ bash example.sh
BBCCC
3.2 最初の文字列を含む、最も長く一致する文字列を削除する
${STR##PATTERN}
はSTR変数の文字列の中に、最初の文字列を含むパターンと一致する文字列を検索します。その中で最も長く一致するパターンを削除します。
次の例の文字列で A*B
パターンを見つけた場合は、AAAB
が最も短く一致するパターンであり、 AAABBB
が最も長く一致するパターンです。実行結果を見れば、最も長く一致する文字列が削除されます。
#!/bin/bash
str="AAABBBCCC"
echo ${str##A*B}
Output:
$ bash example.sh
CCC
3.3 最後の文字列を含む、最も短く一致する文字列の削除
${STR%PATTERN}
はSTR変数の文字列の中に、最後の文字列を含むパターンと一致する文字列を検索します。その中で最も短く一致するパターンを削除します。
次の例の文字列で B*C
パターンを見つけた場合は、BCCC
が最も短く一致するパターンであり、 BBBCCC
が最も長く一致するパターンです。実行結果を見れば最も短く一致する文字列が削除されます。
#!/bin/bash
str="AAABBBCCC"
echo ${str%B*C}
Output:
$ bash example.sh
AAABB
3.4 最後の文字列を含む、最も長く一致する文字列の削除
${STR%%PATTERN}
はSTR変数の文字列の中に、最後の文字列を含むパターンと一致する文字列を検索します。その中で最も長く一致するパターンを削除します。
次の例の文字列で B*C
パターンを見つけた場合は、BCCC
が最も短く一致するパターンであり、 BBBCCC
が最も長く一致するパターンです。実行結果を見れば、最も長く一致する文字列が削除されます。
#!/bin/bash
str="AAABBBCCC"
echo ${str%%B*C}
Output:
$ bash example.sh
AAA
4. 特定の文字に文字列を分割する
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 ':' -f3
Output:
$ bash example.sh
Hello
World
Bash
References
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 - 数値演算(プラス、マイナス、乗算、除算)