PowerShellでの部分文字列検索:クイックガイド

A common scenario in an admin’s world is to figure out a way to find a certain snippet of text inside a string; called the substring. PowerShell makes finding a substring extremely easy.

関連: 文字列のフォーマットと文字列の拡張の学習

無料のライブトレーニングを発表します – PowerShellの旅を始める – Johan Arwidmark氏によるプレゼンテーションです。PowerShellのスキルがITキャリアを向上させる方法を理解し、PowerShellの始め方を学び、最初のスクリプトを構築し、ライブトレーニング環境で直接Johanに質問できます。

PowerShellと文字列

PowerShellの世界では、文字列はシングルクォートまたはダブルクォートで囲まれた一連の文字で構成されています。 "foo"'bar' のような文字列は非常に一般的です。

関連: 基本に戻る:PowerShellの文字列

変数に定義された文字列から一部を取り出す必要がある場合はどうでしょうか?例えば、1234 4th St.という住所が含まれる文字列があるとします。最初の4文字が必要な番号であることを知っています。この場合、PowerShellの Substring() メソッドを使用することができます。

PowerShellのSubstringメソッドの使用

PowerShellで文字列内の文字列を検索するには、Substring() メソッドを使用します。このメソッドは、PowerShellのすべての文字列オブジェクトに存在します。

例えば、The quick brown fox jumped over the fence.という文字列があるとします。最初の5文字を見つけたいとします。その場合、Substring()メソッドを使用します。

$string = 'The quick brown fox jumped over the fence.'
$string.Substring(0,5)

Substring()メソッドに渡す最初の引数は、左端の文字の位置です。この場合、左端の文字はTです。2番目の引数は、最も右端の文字の位置です。この場合、文字はqです。

Substring()メソッドは、それらの文字の間のすべての文字を返します。

以下に実際の例を示します。

次の形式を持つ製品コードがあるとします:XXXXVVVV-MM-DD-YYYY。すべての製品はこのコード形式を持ち、それから逸脱しません。さて、このコードを生成した在庫管理ソフトウェアには、データベースに作成日フィールドが含まれていません。

ただし、ソフトウェアは製品コード自体にMM-DD-YYYYという日付を常に入れているため、この日付を製品コードから推測することができます。製品のデータベースへの挿入日を示すために、何か非常に不要でありながら非常に豪華なレポートを作成するために、この日付が必要です。以下に、これを実現するための良い方法を示します。

$product_code = 'ABCD1234-11-12-2013'
$date_created = [DateTime]$product_code.SubString($product_code.Length-10)

この例では、PowerShellのSubString()メソッドを、組み込みの文字列オブジェクトとして使用し、最初に見つけたい文字の番号をパラメータとして渡しています。

停止文字を指定していないため、文字列の終わりまでのすべての文字を取得するものと仮定されます。最初に数字を見つけるために、まず全体の製品コードの長さを取得し、それから単純に10を引いています。この例では、文字列の右から10番目の文字から開始し、それより右側のすべての文字を取得したいということを意味します。

[DateTime] 型は、ポストのサブストリングのトピックと必ずしも一致しないかもしれませんが、特定の例にうまく適合すると思いました。

11-12-2013の文字列を取得した後、それを [DateTime] オブジェクトに型変換します。これにより、以前は単なる文字列だったものが素敵なオブジェクトに変換されます。ここから、それに対して管理が望むすべての高度な日付演算を実行し、その素敵な棒グラフレポートを生成することができます!

長さプロパティを使用してサブストリングを動的に検索する

上記の例では、文字列内の文字の開始位置と終了位置を静的に定義していました。しかし、最後の位置がわからない場合はどうでしょうか?

たとえば、最後の4文字からサブストリングを見つける必要があるかもしれません。検索対象の文字列は任意の長さである可能性があります。

左から数える正数で終了位置を定義する代わりに、文字列の長さを使用して終了位置を動的に指定し、そこから一定数の文字を差し引くことができます。

上記の文字列を使用して、おそらく最後の4文字を見つけたい場合、次のようにすることができます:

PS> $product_code = 'ABCD1234-11-12-2013'
PS> $product_code.SubString(0,4)
ABCD

0$product_code.Length - 4 に置き換え、終了位置を使用しなくても、以下のように最後の4文字が返されます。

PS> $product_code = 'ABCD1234-11-12-2013'
PS> $product_code.SubString($product_code.Length-4)
2013

終了位置を指定しない場合、PowerShellのsubstringメソッドは常に最後の文字位置をデフォルトにします。

文字列のlengthプロパティを使用して、文字列中の文字の総数から差し引くことで、サブストリングを動的に選択することができます。

Johan Arwidmarkによるプレゼンテーション「Starting your PowerShell Journey」で、無料のライブトレーニングを発表します。PowerShellスキルがITキャリアを向上させる方法を理解し、PowerShellの始め方、最初のスクリプトの作成方法を学び、ライブトレーニング環境で直接Johanに質問できます。

Source:
https://adamtheautomator.com/powershell-substring/