如果行以特定字符开头,则powershell替换命令

时间:2018-02-21 17:02:25

标签: powershell if-statement replace

我有一个我想阅读的文本文件,只有当行以特定字符开头时才使用powershell进行一些替换。

SAy我想将所有短划线( - )更改为'x',当且仅当行以y开头时。

我尝试使用命令

(Get-Content trial.log2) | Foreach-Object {$_ -replace "-", 'x'} | Set-Content trial.log2

然而,它实际上取代了所有出现的破折号,不仅仅是以y开头的行。

如果我想使用一个get content命令进行多次查找替换和字符串操作,是否也可以这样做?

我有另一个字符串操作,但只有它以F

开头

如果行以F开头,则获取该行的前4个字符,然后追加'NEW',然后从字符20到30获取下一个字符。

如果行以y开头,则用X替换 - 。

 $F=(get-content $file) -like 'F*'
  (Get-Content $file) | Foreach-Object {
$_ -replace "^F.+", -join("$F".Substring(0,4),   "$NEW3",   
     } | Set-Content trial.log2

Get-Content trial.log2 | ForEach-Object {
  if ( $_ -match '^y' ) {
    $_ -replace '-', 'X'
  }
  else {
    $_
  }
} | Set-Content trial.log3

但是,如果我这样做,文本会被写两次。我认为我如何寻找以F开头的线路有问题 任何帮助表示赞赏。谢谢!

2 个答案:

答案 0 :(得分:1)

如下:

Get-Content trial.log2 | ForEach-Object {
  if ( $_ -match '^y' ) {
    $_ -replace '-', 'x'
  }
  else {
    $_
  }
} | Out-File trial.log2.temp

答案 1 :(得分:1)

您可以使用look-behind((?<=pattern))断言前面的字符在字符串开头后包含y

(Get-Content trial.log2) | Foreach-Object {$_ -replace '(?<=^y.*)-','x'} | Set-Content trial.log2