GNU/Linux >> Linux の 問題 >  >> Linux

Bashスクリプティング–文字列操作

文字列操作は、bashスクリプトの基本的な概念の1つです。プログラミングでは、文字列は文字の順序付けられたシーケンスであるデータ型の1つです。 bashで文字列を作成および操作する方法を知っていることが重要です。このガイドでは、簡単な例を使用して、Bashシェルスクリプトでの文字列操作について学習します。この記事の最後で、bash文字列を快適に操作できるようになります。

変数の割り当て

文字列を変数に割り当てて、後でスクリプトで使用してさらに処理することができます。たとえば、 "GREET_USER"という名前の変数を作成しています 文字列を端末に印刷します。

$ GREET_USER="Hello, Thanks for visiting OSTechnix"
$ echo "$GREET_USER"

Bashには強い型システムがないため、変数に値を割り当てると、文字列型として扱われます。一重引用符、二重引用符、または引用符なしの文字列を作成できます。

bashでは一重引用符と二重引用符に違いがあります。一重引用符は変数とコマンドの拡張を防ぎますが、二重引用符はそれをサポートします。以下の例を見てください。

"SITE_NAME"という名前の別の変数を作成しました "GREET_USER" 変数。二重引用符の場合、変数は展開され、一重引用符の場合、変数は展開されません。

$ SITE_NAME="OSTechnix"
## DOUBLE QUOTES

$ GREET_USER="Hello, Thanks for visiting ${SITE_NAME}"
$ echo "$GREET_USER"
にアクセスしていただきありがとうございます
# SINGLE QUOTES

$ GREET_USER='Hello, Thanks for visiting ${SITE_NAME}'
$ echo "$GREET_USER"

文字列の長さ

文字列の長さを見つけるには、#を使用できます シンボル。文字列の長さを見つけることは、文字列の数に基づいてロジックを作成する必要がある場合に役立ちます。

$ echo "${#SITE_NAME}"

文字列を配列に変換する

文字列データ型を配列型に変換する方法はたくさんあります。最も簡単な方法は、文字列を中括弧で囲むことです。

$ ARR_TYPE=($GREET_USER)
$ echo ${ARR_TYPE[@]}
$ for element in ${ARR_TYPE[@]}; do
  echo $element
done

2番目の方法は、文字列を分割し、文字列で使用されている区切り文字に基づいて配列として格納することです。前の例では、bashのデフォルトのIFSであるフィールドセパレーター(IFS)としてスペースが使用されています。たとえば、コンマ区切りの文字列がある場合は、IFSをコンマに設定して配列を作成できます。 IFSの詳細については、次のガイドを参照してください。

  • Bashスクリプティング–ループの説明中およびループまで
$ STR_TO_ARR="column1,column2,column3"
$ IFS=","
$ ARR=(${STR_TO_ARR})
$ for element in ${ARR[@]}; do echo $element; done
$ echo "${ARR[@]}"

ケース変換

Bashには、文字列の大文字小文字の変換のサポートが組み込まれています。以下に示すように、大文字と小文字を変換するには、文字列の最後にいくつかの特殊文字を使用する必要があります。

# SPECIAL CHARACTERS

,, ==> Converts an entire string to lowercase
^^ ==> Converts an entire string to Uppercase
~~ ==> Transpose Case
,  ==> Converts first letter alone to lowercase
^  ==> Converts first letter alone to uppercase
# ---- LOWER TO UPPER CASE ----
$ L_TO_U="welcome to ostechnix"
$ echo ${L_TO_U^^}


# ---- UPPER TO LOWER CASE ----
$ U_TO_L="WELCOME TO OSTECHNIX"
$ echo ${L_TO_U,,}


# ---- TRANSPOSE CASE ----
$ TRS_CASE="Welcome To OsTechnix"
$ echo ${TRS_CASE~~}


# ---- FIRST LETTER TO LOWERCASE ----
$ F_TO_L="OSTECHNIX"
$ echo ${F_TO_L,}


# ---- FIRST LETTER TO UPPERCASE ----
$ F_TO_U="ostechnix"
$ echo ${F_TO_U^}

正規表現パターンマッチングを使用して、一致するケースに変換することもできます。

$ L_TO_U="welcome to ostechnix"
$ echo ${L_TO_U^^[toe]}

文字列の連結

文字列を次々に配置することで、複数の文字列を連結できます。文字列の連結方法によっては、文字を追加することもできます。

$ SITE_NAME="OSTechnix"
$ MESSAGE="Welcome to"
$ echo "${MESSAGE} {SITE_NAME}"

文字列のスライス

文字列のスライスは、インデックス位置を使用して文字列の一部を抽出する方法です。文字列内の各文字には、文字列の一部を取得するために使用できる整数値が割り当てられます。インデックス値の範囲は0〜Nです。以下はスライスの構文です。

{STRING:START:LENGTH}

START => Starting Index Position
LENGTH => Length of the String from position START

LENGTHの場合 指定しない場合、文字列はインデックス位置 STARTから最後まで出力されます。

$ SITE_NAME="OSTechnix"
$ echo ${SITE_NAME:2}

LENGTHを指定すると、STARTインデックス位置からの部分文字列と、印刷される文字数が印刷されます。

$ echo ${SITE_NAME:2:2}

文字列をさまざまな方法で逆にすることもできます。最も簡単な方法は、revコマンドを使用することです。外部コマンドを使用せずにbashでこれを実行する場合は、ロジックを手動で作成する必要があります。

$ echo ${SITE_NAME} | rev

検索と置換

sedなどの外部コマンドを使用せずに、文字列内の文字を検索して置換するネイティブな方法があります。 またはawk

最初に出現する部分文字列を置き換えるには、次の構文を使用します。

{STRING/X/Y}
The first occurrence of X will be replaced by Y.

"linux"という単語が最初に出現する以下の例を見てください。 LINUXに置き換えられます 大文字で。

$ MESSAGE="linux is awesome to work with.
Ubuntu is one of the powerful linux distribution"
$ echo $MESSAGE
$ echo ${MESSAGE/linux/LINUX}

出現するすべての単語を置き換えるには、次の構文を使用します。

$ echo ${MESSAGE//linux/LINUX}

部分文字列を削除

文字列から部分文字列を削除するには、さまざまな方法があります。 sed awk 、または tr 使用できるか、bashネイティブの方法でそれを行う方法があります。

bashネイティブの方法では、パラメーター展開を使用してサブストリングを削除します。 %を使用する必要があります シンボルの後に削除するパターンが続きます。これは最後に見つかったパターンと一致し、それを削除します。

たとえば、ピリオド(.)の後に続く単語を削除したいと思います。 )次の構文を使用する必要があります。ここでは、ピリオドの後に来るものは何でも(. )は削除されます。この場合、最後に一致したパターン .com 削除されます。

$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME%.*}

パターンの最初の出現に一致させるには、2倍のパーセンテージを使用します シンボル

$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME%%.*}

#を使用することもできます または## 一種の逆削除を行うシンボル。単一の# シンボル、最初のパターンが一致し、パターンの前のすべてが削除されます。

$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME#*.}

ダブルの## シンボル、最後のパターンが一致し、パターンの前のすべてが削除されます。

$ SITE_NAME="www.ostechnix.com"
$ echo ${SITE_NAME##*.}

結論

この記事では、bashで文字列を作成する方法と、文字列を操作するさまざまな方法について説明しました。 bash文字列の操作に慣れるために、ターミナルを起動して、このガイドに記載されている例の練習を開始してください。フィードバックや質問がある場合は、以下のコメントセクションを使用してください。

Bashスクリプトガイド:

  • Bashスクリプティング–例を使用して説明されたPrintfコマンド
  • Bashスクリプティング–例を使用して説明されたインデックス付き配列
  • Bashスクリプティング–例を使用して説明された連想配列
  • Bashスクリプティング–例で説明されているForループ
  • 例を使用して説明されたBashリダイレクト
  • Bashスクリプティング–例で説明されている変数
  • Bashスクリプティング–例で説明されている関数
  • Linuxの例で説明されているBashEchoコマンド
  • 初心者向けのBashヒアドキュメントチュートリアル

Linux
  1. Bashスクリプト(I)

  2. Bashシェルスクリプトで文字列を比較する方法

  3. ランダムを使用してbashでランダムな文字列を生成する

  1. 文字列にBashの部分文字列が含まれているかどうかを確認する方法

  2. Bash 文字列操作の例 – 長さ、部分文字列、検索と置換

  3. bash のテキスト文字列を配列に変換する

  1. Bash連結文字列

  2. Bashスクリプトで文字列を分割する方法

  3. 「bash -c」は何をしますか?