Powershell仅删除一行的第一个单词

时间:2018-10-22 15:37:27

标签: powershell

我的文本文件包含以下内容:

author   : abc  
Revision : 123  
Date     : 9/4/2018 11.15.50 AM  
Path     : testabc  
Message  : Req ID:abcd1234  
           Rev:1.0.0  
           Status:something   
           Notes:somethingabc  
Path : D:\temp

我希望此内容如下所示:

author   : abc  
Revision : 123  
Date     : 9/4/2018 11.15.50 AM  
Path     : testabc  
Req ID:abcd1234  
Rev:1.0.0  
Status:something   
Notes:somethingabc  
Path : D:\temp

我只需要删除“消息:”(在第5行中),并删除接下来三行的空格。

我在下面尝试过:

$content = Get-Content "D:\test.txt"
$content | Foreach {$_.TrimStart('Message  : ')} |  Foreach {$_.TrimStart()} | Set-Content "D:\test.txt"

2 个答案:

答案 0 :(得分:2)

您可以像这样使用-replace运算符

$lines = Get-Content "D:\test.txt"
$lines -replace "Message  : " -replace "^\s+" | Set-Content "D:\test.txt"

注意:

  • -replace "A","B"A替换B。如果您省略B,它会有效地删除A(即不添加任何内容)。
  • -replace可以链接
  • -replace使用正则表达式,^\s+表示“行首有多个空格”
  • 许多Powershell运算符可以使用数组。此处无需使用ForEach-Get-Content为您提供一行行,-replace每行都运行一次。

答案 1 :(得分:1)

IMO最简单的方法是基于RegEx的-Replace运算符。

(Get-Content .\test.txt ) -replace "^(Message\s+:\s+|\s+)"

查看RegEx工作here with an explanation

RE锚定在行^处,并且有alternate匹配

  • Message\s+:\s+文字消息,后接冒号至少一个空格和至少一个空格
    |

  • 以空格或更精确的方式将任何空白字符(等于[\r\n\t\f\v ]

并用,""代替它们,这些<div @click="foo($event)" ></div> foo(e){ console.log(e.ctrlKey) // If I press CMD and Click to DIV result always FALSE console.log(e.shiftKey) // If I press SHIFT and Click to DIV result TRUE (shift working but cmd is not working) } 不必表达但暗含。