web-dev-qa-db-ja.com

PowerShellでselect-string(grep)を実行するときに、一致する正規表現のみを返すにはどうすればよいですか?

ファイル内のパターンを見つけようとしています。 Select-Stringを使用して一致する場合、行全体が必要ではなく、一致した部分のみが必要です。

これを行うために使用できるパラメーターはありますか?

例えば:

私がやったら

select-string .-.-.

ファイルには次の行が含まれていました。

abc 1-2-3 abc

行全体が返されるのではなく、単に1-2-の結果を取得したいと思います。

Powershellでgrep -oに相当するものを知りたい

41
Skyler

デビッドは正しい道を歩んでいます。 [regex]はSystem.Text.RegularExpressions.Regexの型アクセラレーターです

[regex]$regex = '.-.-.'
$regex.Matches('abc 1-2-3 abc') | foreach-object {$_.Value}
$regex.Matches('abc 1-2-3 abc 4-5-6') | foreach-object {$_.Value}

冗長すぎる場合は、関数でラップできます。

26
Steven Murawski

あるいは単に:

Select-String .-.-. .\test.txt -All | Select Matches
38
Keith Hill

他のアプローチを試してみました:Select-Stringは、使用可能なプロパティMatchesを返します。すべての一致を取得するには、-AllMatchesを指定する必要があります。それ以外の場合は、最初のもののみを返します。

私のテストファイルの内容:

test test1 alk atest2 asdflkj alj test3 test
test test3 test4
test2

スクリプト:

select-string -Path c:\temp\select-string1.txt -Pattern 'test\d' -AllMatches | % { $_.Matches } | % { $_.Value }

戻り値

test1 #from line 1
test2 #from line 1
test3 #from line 1
test3 #from line 2
test4 #from line 2
test2 #from line 3

technet.Microsoft.comのSelect-String

21
stej

の精神で男に魚を教える ...

実行するのは、select-stringコマンドの出力をGet-memberにパイプすることです。これにより、オブジェクトのプロパティを確認できます。これを行うと、「Matches」が表示されます。出力を| **Select-Object** Matches

私の提案は、次のようなものを使用することです:行番号、ファイル名、一致を選択

例:stejのサンプル:

sls .\test.txt -patt 'test\d' -All |select lineNumber,fileName,matches |ft -auto

LineNumber Filename Matches
---------- -------- -------
         1 test.txt {test1, test2, test3}
         2 test.txt {test3, test4}
         3 test.txt {test2}
11
Jaykul

上記の答えはどれも私にとってはうまくいきませんでした。以下がやった。

Get-Content -Path $pathToFile | Select-String -Pattern "'test\d'" | foreach {$_.Matches.Value}

Get-Content -Path $pathToFile | # Get-Content will divide into single lines for us

Select-String -Pattern "'test\d'" | # Define the Regex

foreach {$ _。Matches.Value}#ObjectのMatchesフィールドの値のみを返します。 (これにより、複数の結果の一致が可能になります。)

3
7r4c0r

System.Text.RegularExpressions名前空間を使用できます。

http://msdn.Microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx

2
David McEwing