选择字符串适用于多行输入

时间:2018-09-28 13:59:56

标签: regex powershell

我有一个类似的文件:

abc WANT THIS
def NOT THIS
ghijk WANT THIS
lmno DO NOT LIKE
 pqr WANT THIS
...

我要从中提取的内容

abc
ghijk
pqr

当我应用以下内容时:

(Select-String -Path $infile -Pattern "([^ ]+) WANT THIS").Matches.Groups[1].Value >$outfile

它仅返回第一行的匹配项:

abc

(添加-AllMatches不会更改行为)

2 个答案:

答案 0 :(得分:2)

您可以使用

@SpringBootApplication
@EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class })
public class MySpringApplication {

Select-String -path $infile -Pattern '^\s*(\S+) WANT THIS' -AllMatches | Foreach-Object {$_.Matches} | Foreach-Object {$_.Groups[1].Value} > $outfile 模式将匹配

  • ^\s*(\S+) WANT THIS-一行的开头
  • ^-超过0个空格
  • \s*-第1组:一个或多个非空白字符
  • (\S+)-文字子字符串。

现在, WANT THIS将收集所有匹配项,然后,您需要使用-AllMatches遍历所有匹配项并访问组1值(使用Foreach-Object {$_.Matches}),然后将结果保存到输出文件。

答案 1 :(得分:0)

重新读取代码,将其全部匹配,但仅写入第一个匹配项的值(doh!):

 (Select-String -Path $scriptfile -Pattern "([^ ]+)  WANT THIS").Matches.Groups.Value >$tmpfile

OTOH,看来模式输出对象中的“捕获”还包含“未捕获”内容!!!!