1

我有这个脚本:

$inputfile = 'test'
$m1 = Select-String string1 $inputfile
$m2 = Select-String string2 $inputfile `
    | ? { $_.LineNumber -gt $m1.LineNumber } `
    | select -First 1

$m1.Line+$m2.Line >> results.txt

它工作得很好,但是当string1文件中有一个以上时,脚本就不起作用了。您建议如何使其与包括多个文件在内的文件兼容string1

示例文件:

line string line line text
string text line line string
string2 text line line text
line line text string1 text
line text string2 text text
not text string2 text text
line string1 text text text
string2 text text text text
...

现在的结果是: string2 text line line text

所需的结果是第一行,包括string2after string1

line text string2 text text
string2 text text text text
4

1 回答 1

2

您是否专门寻找使用的解决方案Select-String?如果没有,也许这对你有用?

$lookingFor = "string1";
$string1Line = "";
gc $inputfile | foreach {
  if($_ -match $lookingFor) {
    if($lookingFor -eq "string1") {
      $string1Line = $_;
      $lookingFor = "string2";
    } else { #assuming "string2"
      $string1Line + $_ #return concat of string1 and string2 lines    
      $lookingFor = "string1";
    }    
  }   
}

编辑:关于您的编辑,如果您只需要该string2行,请删除$string1Line及其分配,然后仅返回$_. 而不是$string1Line + $_.

于 2013-07-29T15:07:35.447 回答