简体   繁体   中英

Powershell - Replace first occurrences of String

I've searched for a fair amount for the answer but all I get is how I do it with multiple Strings. I'm pretty new to PowerShell but want to know how I can manage to do it.

I simply want to remplace the first occurence of "1" with "2" ... I only can close to it but no more. The code I found was:

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

The content of the txt is just random: 1 1 1 3 3 1 3 1 3 ... for keeping it simple.

Could someone please explain how I do it with the first occurence and if it is possible and not to time consuming how I can replace for example the 3rd occurrence?

Same answer as Martin but a bit more simplified so you might better understand it:

$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'

If you want this in a one-liner:

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

Found this information here .

You could use a positive lookahead to find the position of the first 1 and capture everything behind. Then you replace the 1 with 2 and the rest of the string using the capture group $1 :

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

Output:

2  1 1 3 3 1 3 1 3

To caputre the third occurence, you could do something like this:

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

Output:

1 1 2 3 3 1 3 1 3

That was pretty good advice. But now im wondering how it could work when the input file has more then one line.

  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 }

If I use the code I used in my first post it will just put everything back in one line, I understand why but not how I could put it back in the same place again after the String manipulation. I use PowerGUI atm to get a better grip on it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM