BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

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

bash シェルでは、ドル記号の後に変数名を使用すると、シェルは変数をその値で展開します。シェルのこの機能は、パラメーター展開と呼ばれます。

ただし、パラメーターの展開には、パラメーターを展開して値を変更したり、展開プロセスで他の値を置き換えたりできる他の形式が多数あります。この記事では、文字列操作操作にパラメーター展開の概念を使用する方法を確認しましょう。

この記事は、進行中の bash チュートリアル シリーズの一部です。 bash { } 拡張に関する以前の記事を参照してください。

1. Bash シェル スクリプト内の文字列の長さを特定する

${#string}

上記の形式は、指定された bash 変数の長さを取得するために使用されます。

$ cat len.sh
#! /bin/bash

var="Welcome to the geekstuff"

echo ${#var}

$ ./len.sh
24

bash 変数の詳細については、6 つの実用的な Bash グローバルおよびローカル変数の例を参照してください。

2. Bash シェル スクリプト内の変数から部分文字列を抽出する

Bash は、文字列から部分文字列を抽出する方法を提供します。次の例は、特定の位置から始まる n 文字を解析する方法を説明しています。

${string:position}

$string から $position の部分文字列を抽出

<センター>
${string:position:length}

$string から $position から始まる $length の文字部分文字列を抽出します。以下の例では、最初の echo ステートメントが 15 番目の位置から始まる部分文字列を返します。 2 番目の echo ステートメントは、15 番目の位置から始まる 4 文字を返します。長さは 0 以上の数値でなければなりません。

$ cat substr.sh
#! /bin/bash

var="Welcome to the geekstuff"

echo ${var:15}
echo ${var:15:4}

$ ./substr.sh
geekstuff
geek

また、$*、$@、$#、$$、$!、$?、$-、$_ bash 特殊パラメーターの詳細については、以前の記事を参照してください。

3.部分文字列の最短一致

次の構文は、$substring の最短一致を $string の前から削除します

${string#substring}

次の構文は、$substring の最短一致を $string の後ろから削除します

${string%substring}

次のサンプル シェル スクリプトでは、上記の 2 つの最短部分文字列一致の概念について説明します。

$ cat shortest.sh
#! /bin/bash

filename="bash.string.txt"

echo ${filename#*.}
echo ${filename%.*}

$ ./shortest.sh
After deletion of shortest match from front: string.txt
After deletion of shortest match from back: bash.string

最初の echo ステートメントでは、部分文字列「*.」が文字とドットに一致し、文字列の先頭から # が削除されるため、部分文字列「bash.」が削除されます。 filename という変数から。 2 番目の echo ステートメントでは、部分文字列 ‘.*’ がドットで始まる部分文字列に一致し、% は文字列の後ろから削除されるため、部分文字列 ‘.txt’ が削除されます。

4.部分文字列の最長一致

次の構文は、$substring の最長一致を $string の前から削除します

${string##substring}

次の構文は、$string の後ろから $substring の最長一致を削除します

${string%%substring}

次のサンプル シェル スクリプトでは、上記の 2 つの最長部分文字列一致の概念について説明します。

$ cat longest.sh
#! /bin/bash

filename="bash.string.txt"

echo "After deletion of longest match from front:" ${filename##*.}
echo "After deletion of longest match from back:" ${filename%%.*}

$ ./longest.sh
After deletion of longest match from front: txt
After deletion of longest match from back: bash

上記の例では、##*. 「bash.string.」に一致する「*.」の最長一致を取り除きます。これをストライピングした後、残りのtxtを出力します。そして %%.* は、「.string.txt」に一致する .* の最長一致を後方から除去し、除去後に「bash」を返します。

5. Bash シェル スクリプト内の文字列値の検索と置換

最初の一致のみを置換

${string/pattern/replacement}

変数 $string のパターンに一致し、パターンの最初の一致のみを置換で置き換えます。

$ cat firstmatch.sh
#! /bin/bash

filename="bash.string.txt"

echo "After Replacement:" ${filename/str*./operations.}

$ ./firstmatch.sh
After Replacement: bash.operations.txt

すべての一致を置換

${string//pattern/replacement}

pattern のすべての一致を置換で置き換えます。

$ cat allmatch.sh
#! /bin/bash

filename="Path of the bash is /bin/bash"

echo "After Replacement:" ${filename//bash/sh}

$ ./allmatch.sh
After Replacement: Path of the sh is /bin/sh

検索と置換については、以前の記事 (sed 置換の例と Vim の検索と置換) を参照してください。

先頭と末尾を置き換える

${string/#pattern/replacement}

次の構文は、パターンが $string の先頭に一致する場合にのみ、置換文字列に置き換えられます。

${string/%pattern/replacement}

次の構文は、指定された $string の末尾でパターンが一致する場合にのみ、置換文字列に置き換えられます。

$ cat posmatch.sh
#! /bin/bash

filename="/root/admin/monitoring/process.sh"

echo "Replaced at the beginning:" ${filename/#\/root/\/tmp}
echo "Replaced at the end": ${filename/%.*/.ksh}

$ ./posmatch.sh
Replaced at the beginning: /tmp/admin/monitoring/process.sh
Replaced at the end: /root/admin/monitoring/process.ksh

推奨読書

Bash 文字列操作の例 – 長さ、部分文字列、検索、置換Bash 101 ハック、Ramesh Natarajan 著 .私はほとんどの時間を Linux 環境に費やしています。だから当然、私は Bash のコマンド ラインとシェル スクリプトの大ファンです。 15 年前、さまざまな種類の *nix に取り組んでいたとき、C シェルと Korn シェルで多くのコードを記述していました。後年、システム管理者として Linux の作業を開始したとき、Bash シェル スクリプトを使用して、考えられるすべてのタスクをほぼ自動化しました。私の Bash での経験に基づいて、Bash コマンド ラインとシェル スクリプトの両方に関する 101 の実用的な例を含む Bash 101 Hacks eBook を作成しました。 Bash の習得を考えている場合は、ぜひこの本を読んでください。Bash のコマンド ラインとシェル スクリプトを制御するのに役立ちます。


  1. メモ帳++で文字列/文字/記号を検索して新しい行に置き換える

    Notepad ++は、簡単な環境でコードを編集するためにプログラマーが主に使用するソースコードおよびテキストエディターです。これはデフォルトのメモ帳の高度なバージョンであり、いくつかの言語をサポートしています。ユーザーがソースコードやテキストを編集するために使用できる多くの機能とツールがあります。ユーザーは、既存のテキストファイルに新しい行を追加する必要がある場合があります。ただし、新しい行に置き換える前に設定する必要のあるさまざまなオプションがあります。この記事では、検索と置換ツールを使用してNotepad++で新しい行を追加する方法について説明します。 文字列/文字/記号を改行に置き換

  2. Bash 変数チュートリアル – 6 つの実用的な Bash グローバル変数とローカル変数の例

    この記事は、進行中の bash チュートリアル シリーズの一部です。他のプログラミング言語と同様に、Bash にも変数が用意されています。 Bash 変数は、プログラムの存続期間中に必要となる情報を一時的に格納します。構文: VARNAME=VALUE 注: 変数の割り当てでは、「=」記号の周りにスペースを入れないでください。 VAR=VALUE を使用すると、シェルは「=」を記号として認識し、コマンドを変数割り当てとして扱います。 VAR =VALUE を使用すると、シェルは VAR がコマンドの名前であると想定し、それを実行しようとします。 シェルは変数の型を気にしません。変数には、