簡體   English   中英

Powershell-替換第一次出現的String

[英]Powershell - Replace first occurrences of String

我已經尋找了相當數量的答案,但是我所得到的只是如何使用多個字符串。 我對PowerShell還是很陌生,但想知道如何才能做到這一點。

我只是想將“ 1”的第一次出現替換為“ 2”……我只能接近它,但是不能再出現了。 我發現的代碼是:

Get-ChildItem "C:\TEST\1.etxt" | foreach {
$Content = Get-Content $_.fullname
$Content = foreach { $Conten -replace "1","2" }
Set-Content $_.fullname $Content -Force
}

txt的內容只是隨機的: 1 1 1 3 3 1 3 1 3 ...為保持簡單。

有人可以解釋一下第一次發生時我該怎么做,如果可能的話,而不是費時的如何替換例如第三次發生?

答案與Martin相同,但更加簡化,因此您可能會更好地理解它:

$R=[Regex]'1'
#R=[Regex]'What to replace'

$R.Replace('1 1 1 3 3 1 3 1 3','2',1)
#R.Replace('Oringinal string', 'Char you replace it with', 'How many')

#Result = '2 1 1 3 3 1 3 1 3'

如果您希望采用單線方式:

([Regex]'1').Replace('1 1 1 3 3 1 3 1 3','2',1)

在這里找到此信息。

您可以使用正向前行查找第一個1的位置並捕獲后面的所有內容。 然后,使用捕獲組$11替換為2 ,並將字符串的其余部分替換為:

"1 1 1 3 3 1 3 1 3" -replace '(?=1)1(.*)', '2$1'

輸出:

2  1 1 3 3 1 3 1 3

要使第三次發生失敗,您可以執行以下操作:

"1 1 1 3 3 1 3 1 3" -replace '(.*?1.*?1.*?)1(.*)', '${1}2$2'

輸出:

1 1 2 3 3 1 3 1 3

那是非常好的建議。 但是現在我想知道當輸入文件多於一行時它如何工作。

  1. 1
  2. 1
  3. 1
  4. 3
  5. 3
  6. 1

    Get-ChildItem "C:\\TEST\\1.txt" | ForEach-Object { $Content = Get-Content $_.fullname $R=[Regex]'1' $Content = ForEach-Object { $R.Replace($Content, '2', '1') } Set-Content $_.fullname $Content -Force }

如果使用我在第一篇文章中使用的代碼,它只會將所有內容放回到同一行中,我理解為什么但不能理解,但在String操作之后如何將它又放回到同一位置。 我使用PowerGUI atm來更好地掌握它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM