Bash で部分文字列を抽出する
このチュートリアルでは、cut
コマンド、サブストリング拡張、および内部フィールドセパレーター(IFS
)を使用して bash でサブストリングを抽出するさまざまな方法を示します。
Bash で cut
コマンドを使って部分文字列を抽出する
以下のスクリプトは、cut
コマンドを使用してサブストリングを抽出します。-d
オプションは、文字列をフィールドに分割するために使用する区切り文字を指定し、-f
オプションは、抽出するフィールドの番号を設定します。
この場合、文字列は区切り文字として _
を使用して分割され、3 番目のフィールドにアクセスするには、引数 3
を -f
オプションに渡します。
#!/bin/bash
printf "Script to extract a substring!\n\n"
numbers='one_two_three_four_five'
printf "full string: $numbers\n"
substring=$(echo $numbers | cut -d '_' -f 3)
printf "substring: $substring\n"
次のように bash スクリプトを実行します。
bash substring.sh
出力から、文字列 one_two_three_four_five
からサブ文字列 three
が抽出されました。
Script to extract a substring!
full string: one_two_three_four_five
substring: three
Bash でサブストリング拡張を使用して部分文字列を抽出する
サブストリング拡張は、組み込みの bash 機能です。次の構文を使用します。
$(variable:offset:length)
variables
は、文字列を含む変数名です。offset
は、文字列の抽出を開始する位置を指定するために使用されます。length
は、offset
を除いて、抽出される文字の範囲を指定するために使用されます。
以下のスクリプトは、変数名を numbers
に設定し、offset
を 4
に設定し、抽出される文字列の length
を 3
に設定します。
#!/bin/bash
printf "Script to extract a substring!\n\n"
numbers='one_two_three_four_five'
substring=${numbers:4:3}
printf "full string: $numbers\n"
printf "substring: $substring\n"
次のように bash スクリプトを実行します。
bash substring.sh
出力から、文字列 one_two_three_four_five
からサブ文字列 two
が抽出されました。
Script to extract a substring!
full string: one_two_three_four_five
substring: two
IFS
を使用して Bash の部分文字列を抽出する
IFS
は Internal Field Separator
の略です。IFS
は、拡張後の単語分割、および組み込みの読み取りコマンドを使用して行を単語に分割するために使用されます。
以下のスクリプトでは、IFS は _
に設定されています。これは、区切り文字として _
を使用して、変数 numbers
の文字列を分割する必要があることを意味します。文字列が分割されると、構文 $[integer]
を使用して単語にアクセスできます。最初の単語には $1
、2 番目の単語には $2
、3 番目の単語には $3
というようにアクセスできます。
#!/bin/bash
printf "Script to extract a substring!\n\n"
numbers='one_two_three_four_five'
IFS="_"
set $numbers
printf "full string: $numbers\n"
printf "substring: $2\n"
次のように bash スクリプトを実行します。
bash substring.sh
出力から、文字列 one_two_three_four_five
からサブ文字列 two
が抽出されました。
Script to extract a substring!
full string: one_two_three_four_five
substring: two