ウェブサイト検索

Bashで文字列を扱う方法


文字列データは、プログラミングでさまざまな目的に使用されます。Bashは弱い型付けの言語であるため、Bashで文字列変数を宣言するのにデータ型宣言は必要ありません。文字列データは、Bashスクリプトによってさまざまな方法で操作できます。Bashプログラミングの問題を解決するために文字列値で一般的に必要とされるさまざまな種類のタスクが、このチュートリアルで複数のBashスクリプトを使用して示されます。

目次:

  1. 文字列を宣言して印刷する
  2. 文字列の長さを調べる
  3. 文字列のケースを変更する
  4. 文字列の値を連結する
  5. 文字列の値を比較する
  6. 書式付きで文字列の値を出力する
  7. 正規表現を使用して文字列の値を検索して置き換える
  8. 文字列から部分文字列を抽出する
  9. 文字列から部分文字列を削除する
  10. 「sed」コマンドで文字列を置き換えます

文字列を宣言して印刷する

以下のスクリプトは、文字列の値を変数に割り当て、その変数の値を出力に表示する方法を示しています。デフォルトの文字列値が最初の文字列変数に割り当てられ、スクリプトを実行した後にユーザーから文字列値が取得されます。

#!/bin/bash

#Assign a string value to a variable
str1="Bash"
#Read string data from the user
read -p "Enter a string value: " str2

#Print the string values
echo "The first string value is $str1"
echo "The second string value is $str2"

出力:

スクリプトを実行した後に次の出力が表示されます。ここでは両方の文字列の値が印刷されます:

文字列の長さを調べる

文字列の長さは、Bashスクリプトを使ってさまざまな方法でカウントできます。文字列の長さを数える一般的な方法は、パラメータ展開を使用することです。「expr」と「awk」コマンドを使用して文字列の長さを数えることができます。文字列の長さを数えるための3つのオプションの使用法は、以下のスクリプトに示されています:

#!/bin/bash

#Take string value
echo -n "Enter your name: "
read name

#Count the length of a string  by using the hash
echo "The name contains ${#name} characters."

#Count the length value by using `expr`
len1=`expr length $name`
printf "The name contains %s characters.\n" $len1

#Count the length value by using `awk`
len2=`echo $name |awk '{print length}'`
printf "The name contains %s characters.\n" $len2

出力:

スクリプトを実行した後、次の出力が表示されます。文字列の長さをカウントするためにスクリプトに示されている3つのオプションによって同じ出力が生成されます:

文字列のケースを変更する

ダブルキャレットシンボル(‘^^’)は文字列の値を大文字に変換するために使用され、ダブルカンマ(,,)は文字列を小文字に変換するために使用されます。文字列を大文字および小文字に変換する方法は、以下のスクリプトに示されています:

#!/bin/bash

#Take a string value from the user
read -p "Enter a string value: " str

#Print the original string value
echo "The original string value: $str"
#Print the string value in uppercase
echo "The string value in uppercase: " ${str^^}
#Print the string value in lowercase
echo "The string value in lowercase: " ${str,,}

出力:

「Bashスクリプト言語」という入力値でスクリプトを実行した後、以下の出力が表示されます:

文字列の値を連結する

Bashには文字列値を連結する複数の方法があります。Bashでの文字列値を連結する2つの方法が次のスクリプトに示されています。一つの方法は文字列値を単に組み合わせること、もう一つの方法は「+=」演算子を使用することです。

#!/bin/bash
#Define a string variable
str1="LinuxHint"
#Concatenate string with another string value
combineStr="Welcome to $str1."
#Print the concatenated string
echo $combineStr

#Define another string value
str2="Bash "
#Concatenate string by using '+' operator
str2+="Script."
#Print the concatenated string
echo $str2

出力:

スクリプトを実行した後に次の出力が表示されます:

文字列の値を比較する

2つの文字列の値が等しいかどうかを確認する方法は、次のスクリプトに示されています。等価演算子(==)は、2つの文字列の値の等価性を確認するために使用されます。最初の等価演算子は、変数が空の文字列を含んでいるかどうかを確認するためにスクリプトで使用されています。2番目の等価演算子は、ユーザーから取得した2つの文字列の値が等しいかどうかを確認するために使用されています。

#!/bin/bash

#Take the string values
read -p "Enter the first string: " str1
read -p "Enter the second string: " str2

#Check whether the string values are empty or not empty
if [[ $str1 == "" || $str2 == "" ]]
then
     echo "One or more input values are empty"
else

        #Check equality of two string variables
        if [ $str1 == $str2 ]; then
               echo "Both input strings are equal."
        else
               echo "Input strings are not equal."
        fi
fi

出力:

入力値「bash」と「python」に対してスクリプトを実行した後、次の出力が表示されます。ここで、入力値は同等ではありません。

スクリプトを実行した後、入力値「bash」と「bash」の出力が次のように表示されます。ここで、入力値は等価です:

空の入力値に対してスクリプトを実行した後、次の出力が表示されます。ここでは、入力値が空です:

文字列の値をフォーマットして印刷する

「printf」コマンドは、Bashで文字列のフォーマットされた出力を印刷するために使用されます。次のスクリプトでは、ユーザーから文字列の値を取得し、「printf」コマンドを使用して入力値のフォーマットされた出力を印刷します。ここで、「if」文は、出力を印刷する前に入力値が空であるかどうかをチェックするために使用されます。

#!/bin/bash

#Take a string value
read -p "Enter your favorite programming language: " lang

if [ ! -z $lang ]
then
     #Print the formatted output
     printf "Your favorite programming language is %s\n" "$lang"
else
     #Print the error message
     echo "No input value is given."
fi

次の出力は、「PHP」という入力値のスクリプトを実行した後に表示されます。

空の入力値に対してスクリプトを実行した後、次の出力が表示されます:

正規表現を使用して文字列の値を検索および置換する

Bashには文字列の一部を検索および置換するための多くの方法があります。正規表現パターンは、Bashで文字列の一部を検索および置換する方法の一つです。次のスクリプトでは、ユーザーから文字列値を取得し、入力された文字列で「programming」という単語を検索します。入力値に検索語が含まれている場合、入力値の単語が「scripting」という単語に置き換えられ、置き換えられた文字列値が別の変数に格納されます。その後、元の文字列と修正された文字列の両方が出力に表示されます。

#!/bin/bash

#Take the main string value
read -p "Enter a string value: " Str

#Replace string by using regex pattern
replaceStr="${Str/programming/scripting}"

#Print the main string and the replaced string
echo "The main string value is $Str"
echo "The replaced string value is $replaceStr"

次の出力は、入力値「Bashプログラミング言語」でスクリプトを実行した後に表示されます。「プログラミング」という単語は入力値に存在します。したがって、修正された文字列は「Bashスクリプティング言語」であり、出力に印刷されます:

文字列から部分文字列を抽出する

Bashには、他のプログラミング言語のように文字列値から部分文字列を取得するための組み込み関数がありません。しかし、Bashには同じタスクを実行するための複数のオプションがあります。ユーザーから取得した文字列値から部分文字列を取得するために、以下のスクリプトで示す2つの方法があります。1つの方法はパラメータ展開を使用することであり、もう1つの方法は「expr」コマンドを「substr」と一緒に使用することです。

#!/bin/bash

#Take the main string value
read -p "Enter a string value: " Str

if [ ! -z $Str ]
then

    #Use of parameter expansion
    echo "The substring by using parameter expansion: "
    echo ${Str:5:4}

    #Use of 'substr' and `expr` command
    echo "The substring by using 'substr' with 'expr' command: "
    expr substr "$Str" 6 4
fi

出力:

スクリプトを「LinuxHint」という入力値で実行した後、次の出力が現れます。パラメータ展開では、開始位置は5で、0から数え始め、部分文字列の長さは4です。したがって、「Hint」という文字列がパラメータ展開のために出力されます。「expr」コマンドでは、開始位置は6で、1から数え始め、部分文字列の長さは4です。このコマンドの出力は、パラメータ展開と同じです:

文字列から部分文字列を削除する

文字列値からの「削除」部分文字列は、前の例のように部分文字列を取得する別の方法です。「カット」コマンドは、以下のスクリプトで示されている文字列値の一部を切り取ったり削除したりするために使用できます。このスクリプトによれば、入力値がユーザーから取得され、その入力値が空であるかどうかが確認されます。入力値が空でない場合、「カット」コマンドは入力値の特定の部分を切り取り、それを変数に保存します。その後、元の文字列値と削除された文字列値が印刷されます。

#!/bin/bash

#Take the main string value
read -p "Enter a string value: " Str

if [ ! -z "$Str" ]
then

   #Delete a particular part of the main string
   mStr=$(echo "$Str" | cut -c 7-11)

   #Print the main string and the string after deleting
   echo "The main string value is $Str"
   echo "The string value after deleting substring is $mStr"
fi

出力:

次の出力は、「Hello World」という入力値でスクリプトを実行した後に表示されます。開始位置は7に設定され、終了位置は「cut」コマンドで11に設定されています。したがって、「cut」コマンドは出力に表示される「World」を返します。

ファイル内の文字列値を「sed」コマンドで置換する

「sed」コマンドは、Bashスクリプトで複数の目的に使用できます。このコマンドを使用して、ファイル内の文字列の値を置き換えることができます。次の内容のテキストファイルを作成し、「sed」コマンドを使用してファイルから特定の文字列の値を検索して置き換える方法を示します。

temp.txt

私はBashプログラミングが好きです。

Bashはインタープリタ型の言語です。

Bashは弱い型付けの言語です。

以下のスクリプトでは、ファイル名がユーザーから取得されます。ファイル名が現在の場所に存在する場合、“while”ループを使用してファイルの元の内容が印刷され、その後ファイルの内容が置き換えられます。検索する単語と置き換える単語はユーザーから取得されます。両方の入力値が空でない場合、“sed”コマンドを使用して、入力値に基づいてファイルの内容が検索され、置き換えられます。変更後、ファイルの内容が再び印刷されます。

#!/bin/bash

#Take the filename
read -p "Enter the filename: " fn

if [ -f $fn ]
then
       echo "The original content of the file:"
       while read -r ln; do
          echo "$ln"
       done <$fn

       echo

       #Take the search string value
       read -p "Enter the search word: " searchStr

       #Take the replace string value
       read -p "Enter the replace word: " replaceStr

       #Check whether the search and replace string values are empty or not
       if [[ ! -z $searchStr && ! -z $replaceStr ]]
       then
              sed -i "s/$searchStr/$replaceStr/" $fn
       fi

       echo

       echo "The modified content of the file:"
       while read -r ln; do
          echo "$ln"
       done <$fn
else
      echo "No filename is given."
fi

出力:

以下の出力は、「temp.txt」というファイル名、「Python」という検索語、および「Bash」という置換語でスクリプトを実行した後に表示されます。この出力によると、「temp.txt」ファイルには「Python」という単語が3回存在し、これらの単語はファイル内で「Bash」という単語に置き換えられます。

結論

このチュートリアルでは、10種類のBashスクリプトの例を使用して、Bashにおける文字列データの使い方を示しています。このチュートリアルでは、Bashの新しいユーザーを助けるために、Bashにおける文字列データの基本的な使い方のほとんどをカバーしています。