【问题标题】:Powershell Select-String Remove Carriage ReturnPowershell Select-String 删除回车符
【发布时间】:2014-07-08 03:06:46
【问题描述】:

我正在尝试在报告的不同行中选择回车。最后,我想删除回车。如果我使用"`n","`r","\n","\r",我不会得到任何结果。当我在 Vi 中访问报告时,我可以看到回车符 (^L)。所以我现在不知道该怎么做,但把我的头发拉出来。

ls C:\DOWNLOAD\STANDARD\AUDIT*PRM3711* | %{ gc $_ | Select-String -Pattern '\** WARNING \** -  ' }

结果

** WARNING ** -  SAMPLE REPORT
** WARNING ** -  SAMPLE REPORT
** WARNING ** -  SAMPLE REPORT
** WARNING ** -  SAMPLE REPORT

【问题讨论】:

    标签: powershell


    【解决方案1】:

    gc 将文件内容作为行数组返回,其中不包含换行符。

    如果你需要跨行匹配,我会建议this answer的方法,例如:

    $content = [IO.File]::ReadAllText( $_.FullName )
    if( $content -match "(?s)..." ) {
      # use values in $matches
    }
    

    要从匹配中删除换行符,请尝试$matches[0] -replace [Environment]::NewLine$matches[0] -replace "`r*`n*"

    【讨论】:

      【解决方案2】:

      在powershell中回车+换行应该是`n

      我认为你可以使用这个:

      [string]::Join("",(gc 'C:\temp\test.txt'))
      

      【讨论】:

      • 我已经尝试了 `n 没有任何运气。在 Vim "** WARNING ** - ^LSAMPLE REPORT" 中看起来像这样。注意 SAMPLE 前面的胡萝卜 L。当我在 Powershell 中执行 Select-String 时,它会将回车作为空格。
      【解决方案3】:

      Powershell 使用

      `r`n

      用于回车换行

      get-content 创建一个字符串数组

      所以你可以使用 $result = (cat C:\DOWNLOAD\STANDARD\AUDIT*PRM3711* | where { $_ -like '** WARNING ** - ' } ) $result = $result -replace '** WARNING ** - ' , 'rn** WARNING ** - '

      另外,我认为在 PS3 中,您可以使用 get-content -delimiter `0

      我现在面前没有 PS3 盒子....

      【讨论】:

      • Aaand 它吃掉了后面的记号... -replace "pattern", "backtick R backtick N pattern"
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 1970-01-01
      相关资源
      最近更新 更多