Powershellの2つの文字列間で文字列を照合する正規表現

マイケルSパレス

これが私のサンプルデータです:

上のオプションfailonnomatch
のOptionバッチ
オフオプション確認
オープンSFTP://ユーザ名:[email protected]:22ホスト鍵= "SSH-RSA 1024 00:00:00:00:00:00:00:00:00: 00:00:00:00:00:00:00 "

get File * .txt \ local \ path \ Client \ File.txt
mv File * .txt / remote / archive /


出口を閉じる

このテキストファイルから情報を抽出するPowerShellスクリプトを作成したいと思います。

必要なアイテムのリスト:

  • ユーザー名
  • パスワード
  • ホスト
  • sshキー
  • ファイル名
  • ローカルパス
  • リモートパス

これらのいくつかの方法を学べば、この方法がすべての項目に適用できることを願っています。次のPowerShell /正規表現を使用してsshキーを抽出しようとしました。

$doc -match '(?<=hostkey=")(.*)(?=")' 

サンプルデータである$ doc

しかし、それは行全体を返しているように見えます。どんな助けでも大歓迎です。ありがとうございました。

mklement0

場合は-match返送された行全体を、含意はということで、あなたのLHS-match操作である配列今度はあなたが使用することを示唆しているGet-Content なし-Rawなどの入力をもたらし、配列ケースはこれに-matchとして機能フィルター

代わりに、;を使用してファイルを単一の複数行の文字列として読み取りますGet-Content -RawスカラーLHS、そして返し、とのマッチング演算の結果が自動変数で報告されている(そのハッシュテーブルのエントリは、全体的な試合が含まれている、第一キャプチャグループがマッチしたものを、...):
-match[bool]
$Matches01

# Read file as a whole, into a single, multi-line string.
$doc = Get-Content -Raw file.txt 

if ($doc -match '(?<=hostkey=")(.*)(?=")') {
   # Output what the 1st capture group captured
   $Matches[1]
}

サンプル入力を使用すると、上記の結果が得られます
ssh-rsa 1024 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00


次に、アプローチを拡張して複数のトークンをキャプチャできます。その場合は名前付きキャプチャグループ(?<name>...)を使用することをお勧めます。次の例では、このような名前付きキャプチャグループを使用して、対象のトークンのいくつかを抽出します。

if ($doc -match '(?<=sftp://)(?<username>[^:]+):(?<password>[^@]+)@(?<host>[^:]+)'){
  # Output the named capture-group values.
  # Note that index notation (['username']) and property
  # notation (.username) can be used interchangeably.
  $Matches.username
  $Matches.password
  $Matches.host
}

サンプル入力を使用すると、上記の結果は次のようになります。

username
password
host.name.net

上記を拡張して、対象のすべてのトークンをキャプチャできます。デフォルトでは(改行)文字と一致しない
ことに注意し.ください\n


オプションの読書:使用xIgnoreWhiteSpace正規表現を読みやすくする)オプションを:

その数のトークンを抽出すると、読みにくい複雑な正規表現が生成される可能性があります。その場合、xIgnoreWhiteSpace)正規表現オプションが役立ちます(インラインオプションとして(?x)、正規表現の開始時に)。

if ($doc -match '(?x)
    (?<=sftp://)(?<username>[^:]+)
    :(?<password>[^@]+)
    @(?<host>[^:]+)
    :(?<port>\d+)
    \s+hostkey="(?<sshkey>.+?)"
    \n+get\ File\*\.txt\ (?<localpath>.+)
    \nmv\ File\*\.txt\ (?<remotepath>.+)
  '){
    # Output the named capture-group values.
    $Matches.GetEnumerator() | ? Key -ne 0
}

ノートは正規表現をより読みやすくするために使用される空白は、(複数の行全体に拡散)する方法無視空白が入力に一致するのに対し、マッチングしながらされなければならないエスケープ単一空間と一致するように、例えば(、または[ ]、又は\s任意の空白に一致するようにchar。)

サンプル入力を使用すると、上記の結果は次のようになります。

Name                           Value
----                           -----
host                           host.name.net
localpath                      \local\path\Client\File.txt
port                           22
sshkey                         ssh-rsa 1024 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
remotepath                     /remote/archive/
password                       password
username                       username

キャプチャグループの順序が狂っている理由$Matchesは、(タイプのハッシュテーブル[hashtable]であり、そのキーの列挙順序は実装アーティファクトであることに注意してください。特定の列挙順序は保証されません。

ただし、キャプチャグループへのランダムアクセスは問題なく機能します。たとえば、$Matches.portを返し22ます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

他の2つの文字列間で文字列を照合する正規表現

分類Dev

2つの部分文字列間で任意の数の要素を照合するためのPython正規表現?

分類Dev

文字列内の2つの同じ文字の最初の文字のみを照合するための正規表現

分類Dev

JavaScriptで2つの文字列間の文字列を取得する正規表現

分類Dev

正規表現-2番目に出現する文字間の文字列を照合します

分類Dev

正規表現の2つの文字間で特定の文字を検索して照合する

分類Dev

部分文字列で正規表現を照合し、特定の区切り文字の間で文字列を返す

分類Dev

正規表現JS:改行を含む2つの文字列間の文字列の照合

分類Dev

正規表現を持つ特定の文字列の一部でない限り、文字を照合する方法

分類Dev

MongoDB文字列を照合するための正規表現

分類Dev

空の文字列を正規表現と照合する

分類Dev

文字列を照合するための正規表現

分類Dev

HTML文字列を照合するための正規表現

分類Dev

Python正規表現、n回の出現で文字列を照合する方法

分類Dev

2つの数値の間で文字のリストを照合するための正規表現

分類Dev

2つの文字列(変数)間で抽出する正規表現

分類Dev

正規表現で文字列を取得し、文字列を照合した後に他の文字列を削除する方法

分類Dev

MySQLの正規表現で文字列内の単語を照合する関数

分類Dev

正規表現を使用して、周囲の文字列を除く2つの周囲の文字列間で出現するすべての文字列を照合するにはどうすればよいですか?

分類Dev

文字列を正規表現と照合して、文字の最初の2つの単語を知る方法は、最初の単語が後で大文字になります

分類Dev

2つの文字列間の部分文字列を削除する正規表現

分類Dev

文字列を部分文字列と照合するための正規表現

分類Dev

PowerShell正規表現:複数行にある2つの文字列間の文字列をキャプチャする

分類Dev

正規表現-2つの文字列間で文字列を一致させる

分類Dev

特定の文字列の後のテキストを別の特定の文字列まで照合する正規表現

分類Dev

2つの文字列間で複数行の文字を照合するPowerShell

分類Dev

2つの%文字の間の文字列を取得する正規表現

分類Dev

2つの文字列の間にある文字を無視する正規表現?

分類Dev

正規表現:2つの文字/文字列の間の文字列を抽出します

Related 関連記事

  1. 1

    他の2つの文字列間で文字列を照合する正規表現

  2. 2

    2つの部分文字列間で任意の数の要素を照合するためのPython正規表現?

  3. 3

    文字列内の2つの同じ文字の最初の文字のみを照合するための正規表現

  4. 4

    JavaScriptで2つの文字列間の文字列を取得する正規表現

  5. 5

    正規表現-2番目に出現する文字間の文字列を照合します

  6. 6

    正規表現の2つの文字間で特定の文字を検索して照合する

  7. 7

    部分文字列で正規表現を照合し、特定の区切り文字の間で文字列を返す

  8. 8

    正規表現JS:改行を含む2つの文字列間の文字列の照合

  9. 9

    正規表現を持つ特定の文字列の一部でない限り、文字を照合する方法

  10. 10

    MongoDB文字列を照合するための正規表現

  11. 11

    空の文字列を正規表現と照合する

  12. 12

    文字列を照合するための正規表現

  13. 13

    HTML文字列を照合するための正規表現

  14. 14

    Python正規表現、n回の出現で文字列を照合する方法

  15. 15

    2つの数値の間で文字のリストを照合するための正規表現

  16. 16

    2つの文字列(変数)間で抽出する正規表現

  17. 17

    正規表現で文字列を取得し、文字列を照合した後に他の文字列を削除する方法

  18. 18

    MySQLの正規表現で文字列内の単語を照合する関数

  19. 19

    正規表現を使用して、周囲の文字列を除く2つの周囲の文字列間で出現するすべての文字列を照合するにはどうすればよいですか?

  20. 20

    文字列を正規表現と照合して、文字の最初の2つの単語を知る方法は、最初の単語が後で大文字になります

  21. 21

    2つの文字列間の部分文字列を削除する正規表現

  22. 22

    文字列を部分文字列と照合するための正規表現

  23. 23

    PowerShell正規表現:複数行にある2つの文字列間の文字列をキャプチャする

  24. 24

    正規表現-2つの文字列間で文字列を一致させる

  25. 25

    特定の文字列の後のテキストを別の特定の文字列まで照合する正規表現

  26. 26

    2つの文字列間で複数行の文字を照合するPowerShell

  27. 27

    2つの%文字の間の文字列を取得する正規表現

  28. 28

    2つの文字列の間にある文字を無視する正規表現?

  29. 29

    正規表現:2つの文字/文字列の間の文字列を抽出します

ホットタグ

アーカイブ