技術ノート Linux Linux 上の Bash で文字列を操作する方法

Linux 上の Bash で文字列を操作する方法

Linux がよく備えているものがあるとすれば、それは文字列を操作するためのユーティリティです。しかし、 Bash シェル には一連の機能が直接組み込まれています。使用方法は次のとおりです。

文字列の操作

Linux エコシステムには、テキストや文字列を操作するための素晴らしいツールが満載です。これらには、 awk grep sed 、および Cut が含まれます。大量のテキストラングリングを行う場合は、これらを選択することをお勧めします。

ただし、場合によっては、特に短くて単純なスクリプトを作成する場合には、シェルの組み込み機能を使用すると便利です。スクリプトを他の人と共有し、そのコンピュータで実行する場合、標準の Bash 機能を使用すると、他のユーティリティの存在やバージョンについて心配する必要がなくなります。

専用ユーティリティの機能が必要な場合は、ぜひ使用してください。それが彼らがそこにいる理由です。ただし、多くの場合、スクリプトと Bash は単独で仕事を完了できます。

これらは Bash に組み込まれているため、スクリプトまたはコマンド ラインで使用できます。ターミナル ウィンドウでこれらを使用すると、コマンドのプロトタイプを作成し、構文を完成させるための迅速かつ便利な方法です。これにより、編集、保存、実行、デバッグのサイクルが回避されます。

Linux 上の Bash で文字列を操作する方法

文字列変数の作成と操作

変数を宣言し、それに文字列を割り当てるために必要なのは、等号を使用して変数に名前を付けることだけです。

 =

、文字列を指定します。文字列にスペースが含まれる場合は、一重引用符または二重引用符で囲みます。等号の両側に空白がないことを確認してください。

 my_string="こんにちは、ハウツーオタクの世界。"

 $my_string をエコーする

変数を作成すると、その変数名がシェルのタブ補完単語のリストに追加されます。この例では、「my_」と入力して「Tab」キーを押すと、コマンド ラインにフルネームが入力されます。

Linux 上の Bash で文字列を操作する方法

読み取り専用変数

変数の宣言に使用できる declare コマンドがあります。単純な場合には実際には必要ありませんが、これを使用するとコマンドのオプションの一部を使用できるようになります。おそらく最もよく使用するのは -r (読み取り専用) オプションです。これにより、変更できない読み取り専用の変数が作成されます。

 destroy -r read_only_var="これは不変の文字列です!"

新しい値を代入しようとすると失敗します。

 read_only_var="新しい文字列..." 

Linux 上の Bash で文字列を操作する方法

ターミナルウィンドウへの書き込み

echo または printf を 使用して複数の文字列をターミナル ウィンドウに書き込むと、それらが 1 つの文字列であるかのように表示されます。また、独自の文字列変数に限定されず、 環境変数を コマンドに組み込むこともできます。

 user_account="あなたのユーザー アカウントは:"

 echo $user_account $USER

文字列の連結

プラスイコール演算子 += 使用すると、2 つの文字列を「加算」できます。それを連結と言います。

 user_account="あなたのユーザー アカウントは:"

ユーザーアカウント+=$USER

 $user_account をエコーする

連結された文字列の間にスペースは自動的に追加されないことに注意してください。スペースが必要な場合は、最初の文字列の末尾または 2 番目の文字列の先頭に明示的にスペースを入れる必要があります。

 user_account="あなたのユーザー アカウントは次のとおりです: "

ユーザーアカウント+=$USER

 $user_account をエコーする

ユーザー入力の読み取り

宣言の一部として内容が定義された文字列変数を作成するだけでなく、ユーザー入力を文字列変数に読み取ることができます。

read コマンドはユーザー入力を読み取ります。 -p (プロンプト) オプションは、ターミナル ウィンドウにプロンプ​​トを書き込みます。ユーザーの入力は文字列変数に保存されます。この例では、変数は user_file と呼ばれます。

 read -p "どのファイルを開きますか?" user_file

 $user_file をエコーする

入力をキャプチャするための文字列変数を指定しなくても、機能します。ユーザー入力は REPLY という変数に保存されます。

 read -p "どのファイルを開きますか?"

エコー $REPLY

通常は、独自の変数を用意し、意味のある名前を付ける方が便利です。

Linux 上の Bash で文字列を操作する方法

文字列の操作

これで、作成時に定義された文字列、ユーザー入力から読み取られた文字列、または文字列を連結して作成された文字列を取得したので、それらを使用して処理を開始できます。

文字列の長さを調べる

文字列の長さを知ることが重要または有用な場合は、変数名の前にハッシュ「 # 」記号を付けることで文字列の長さを取得できます。

 my_string="この文字列には 39 文字が含まれています。"

エコー ${#my_string}

文字オフセットによる部分文字列の抽出

文字列内の開始点とオプションの長さを指定することで、文字列変数から部分文字列を抽出できます。長さを指定しない場合、部分文字列には開始点から最後の文字までのすべてが含まれます。

変数名の後に開始点と長さがコロン「 : 」で続きます。文字列変数内の文字には 0 から始まる番号が付けられることに注意してください。

 long_string="フランケンシュタイン、あるいは現代のプロメテウス"

部分文字列=${長い文字列:0:12}

 $部分文字列をエコーする

エコー ${long_string:27}

別のバリエーションでは、文字列の末尾からいくつかの文字を破棄できます。事実上、開始点を設定し、長さとして負の数値を使用できるようになります。部分文字列には、文字列の開始点から末尾までの文字から、負の数で指定した文字数を引いたものが含まれます。

 my_string="アルファベット順"

エコー ${my_string:5:-4}

すべての場合において、元の文字列変数は変更されません。 「抽出された」部分文字列は、実際には変数の内容から削除されません。

区切り文字による部分文字列の抽出

文字オフセットを使用する場合の欠点は、抽出する部分文字列が文字列内のどこにあるかを事前に知っておく必要があることです。

文字列が繰り返し文字で区切られている場合、部分文字列が文字列内のどこにあるか、どのくらいの長さであるかがわからなくても、部分文字列を抽出できます。

文字列の先頭から検索するには、変数名の後に 2 つのパーセント記号 (区切り文字 %% 、およびアスタリスク * を続けます。この文字列内の単語はスペースで区切られています。

 long_string="最初、2、3、4、5"

エコー ${long_string%%' '*}

これは、文字列の先頭から、区切り文字を含まない最初の部分文字列を返します。これは、短い部分文字列オプションと呼ばれます。

長い部分文字列オプションは、区切り文字で区切られた最後の部分文字列までの文字列の先頭部分を返します。つまり、区切り文字で区切られた最後の部分文字列が省略されます。構文上の唯一の違いは、コマンド内で単一のパーセント記号「 % 」を使用することです。

 long_string="最初、2、3、4、5"

エコー ${long_string%' '*}

ご想像のとおり、文字列の末尾から同じように検索できます。パーセント記号の代わりにハッシュ「 # 」記号を使用し、コマンド内のアスタリスク「 * 」の後に区切り文字を移動します。

 long_string="単語のこの長い文字列はピリオドで区切られています"

 ${long_string##*.} をエコーし​​ます。

これは短い部分文字列オプションであり、区切り文字を含まない文字列の後ろから最初に見つかった部分文字列を切り取ります。

 long_string="単語のこの長い文字列はピリオドで区切られています"

 ${long_string#*.} をエコーし​​ます。

長い部分文字列オプションは、文字列の前から最初の区切り文字までの文字列の後部を返します。つまり、最初の区切り文字で区切られた部分文字列が省略されます。

Linux 上の Bash で文字列を操作する方法

部分文字列の置換

部分文字列を他の部分文字列と交換するのは簡単です。形式は、文字列の名前、置換される部分文字列、および挿入される部分文字列をスラッシュ「 / 」文字で区切ったものです。

 string="青ブタが笑います"

エコー ${文字列/豚/ヤギ}

検索を文字列の末尾に限定するには、検索文字列の前にパーセント記号「 % 」文字を付けます。

 string="青ブタが笑います"

 echo ${string/%くすくす/くすくす笑う}

検索を文字列の先頭に限定するには、検索文字列の前にハッシュ「 # 」文字を付けます。

 string="青ブタが笑います"

エコー ${文字列/#青/黄} 

Linux 上の Bash で文字列を操作する方法

文字列は柔軟なものです

文字列が希望どおりでない場合、または必要な場合は、これらのツールを使用して、ニーズに合うように文字列を再フォーマットすることができます。複雑な変換には専用のユーティリティを使用しますが、軽微な調整にはシェル組み込みを使用して、外部ツールの読み込みと実行のオーバーヘッドを回避します。

「 Linux 上の Bash で文字列を操作する方法」に関するベスト動画選定!

モテる!シェルスクリプト入門講座。シェルとは〜基本操作までを解説
【9分で解説】Linux入門|パイプライン・リダイレクト(Linuxで最低限知っておきたい基礎知識)