【问题标题】:powershell | select-string pattern + line unter the pattern外壳 |选择字符串模式 + 模式下的线
【发布时间】:2021-10-03 22:16:56
【问题描述】:

有没有办法选择一个字符串模式,并得到模式后面的行。

我的元数据看起来像:

"t": "d",
      "n": "00001212",
        "22.06.2031",
        "",
        "",
        "batman",

我的代码如下:

$contentNameFolder= $content__ | Select-String -Pattern '"n": * ' 

我的输出看起来像:

"n": "00001212",

我想得到的是:

"n": "00001212",
        "22.06.2031",

我试图在我的代码中添加 -context 1,2 或类似的东西,但这对我不起作用。

【问题讨论】:

  • 当您仔细(重新)阅读Select-String 的帮助主题时,您可能会注意到-Context 参数,它使您有机会在匹配之前和/或之后包含行。
  • ($content__ -join "`n" | Select-String -Pattern '"n":.*\s.*' ).Matches.Value
  • 你试过了吗:-Context 0,1?那应该在比赛之前打印 0 行,在比赛之后打印 1 行。
  • 假设您的$content__ 是一个字符串数组,您使用的模式将只返回一个字符串...包含"n": 的字符串。如果要添加更多行,则需要[A] 使用-Context 参数,[B] 使用多个正则表达式模式,或者[C] 将谎言作为多行字符串引入并使用正则表达式模式覆盖该字符串的多行。

标签: powershell select-string


【解决方案1】:

你已经很亲近了。正如您已经看到的,Select-String 具有 -Context 参数,它允许您指定应显示的匹配前后的行。

如果您传入一个包含两个整数的数组,第一个数字确定匹配前的行数,第二个数字确定匹配后的行数(参见:Select-String | Microsoft Docs)。

如果您不希望显示匹配之前的任何行,请将第一个整数设置为 0

$contentNameFolder= $content__ | Select-String -Pattern '"n": * ' -Context 0,1

在您的示例中,这将为您提供以下结果:

"n": "00001212",
        "22.06.2031",

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 2010-10-18
    • 2014-10-01
    • 2021-04-01
    • 1970-01-01
    • 2021-06-18
    • 2019-05-17
    相关资源
    最近更新 更多