![]() |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| Welcome to Windows Vista Forums. Our forum is dedicated to helping you find solutions with any problems, errors or issues you are experiencing with Windows Vista. The Vista forum also covers news and updates and has an extensive Windows Vista tutorial section that covers a wide range of tips and tricks. |
| |||||||
![]() |
| |
| | #1 (permalink) |
| | Find/Replace Hello, I am just learning PowerShell and need a little guidance. What I am trying to do is to search a directory recursively for files that contain a text string and modify the file(s) by replacing that string with other text. To do the search, I can use: dir -r c:\temp\* | Select-string "xyz" but from there, I am not sure how to go about doing the replace in each file found. Can anyone point me in the right direction to accomplish this? Thanks, -e |
My System Specs![]() |
| | #2 (permalink) |
| | Re: Find/Replace <eric.eickhoff@sbcglobal.net> wrote in message news:1174589436.498853.183440@n76g2000hsh.googlegroups.com... > Hello, > > I am just learning PowerShell and need a little guidance. > > What I am trying to do is to search a directory recursively for files > that contain a text string and modify the file(s) by replacing that > string with other text. > > To do the search, I can use: > > dir -r c:\temp\* | Select-string "xyz" > > but from there, I am not sure how to go about doing the replace in > each file found. > > Can anyone point me in the right direction to accomplish this? There isn't a native PowerShell cmdlet that replaces strings in files in place. However there is a -replace operator that provides the basic replace functionality. You will need to do this in several steps: $pattern = 'some search pattern - could be regex' $replacement = 'some replacement potentially using capture groups like so $1 $2 or ${namedGroup}' foreach ($file in (gci c:\temp\* -rec)) { $text = get-content $file if ($text -match $pattern) { $text -replace $pattern, $replacement > $file } } -- Keith |
My System Specs![]() |
| | #3 (permalink) |
| | Re: Find/Replace > > There isn't a native PowerShell cmdlet that replaces strings in files in place. However there is a -replace operator that provides the basic replace functionality. You will need to do this in several steps: > > $pattern = 'some search pattern - could be regex' > $replacement = 'some replacement potentially using capture groups like so $1 $2 or ${namedGroup}' > foreach ($file in (gci c:\temp\* -rec)) { > $text = get-content $file > if ($text -match $pattern) { > $text -replace $pattern, $replacement > $file > } > > } > That looks interesting, I was still thinking of a solution using the Win32 Unix tools find, egrep and sed, bur their sed implementation didn't update files in place so it all fell a bit flat.. I'm a little puzzled by where -match and -replace come from, as they are not native to powershell and do not appear to be members of the string class either. Do they belong to an object - I can't find the documentation in MSDN 2005? Thanks, Duncan. |
My System Specs![]() |
| | #4 (permalink) |
| | Re: Find/Replace > I'm a little puzzled by where -match and -replace come from, as they > are not native to powershell and do not appear to be members of the > string class either. Do they belong to an object - I can't find the > documentation in MSDN 2005? they asre native powershell operators, for more information see : Get-Help about_operator Greetings /\/\o\/\/ "Duncan Smith" wrote: > > > > There isn't a native PowerShell cmdlet that replaces strings in files in place. However there is a -replace operator that provides the basic replace functionality. You will need to do this in several steps: > > > > $pattern = 'some search pattern - could be regex' > > $replacement = 'some replacement potentially using capture groups like so $1 $2 or ${namedGroup}' > > foreach ($file in (gci c:\temp\* -rec)) { > > $text = get-content $file > > if ($text -match $pattern) { > > $text -replace $pattern, $replacement > $file > > } > > > > } > > > > That looks interesting, I was still thinking of a solution using the > Win32 Unix tools find, egrep and sed, bur their sed implementation > didn't update files in place so it all fell a bit flat.. > > I'm a little puzzled by where -match and -replace come from, as they > are not native to powershell and do not appear to be members of the > string class either. Do they belong to an object - I can't find the > documentation in MSDN 2005? > > Thanks, > > Duncan. > > |
My System Specs![]() |
| | #5 (permalink) |
| | Re: Find/Replace On Mar 23, 11:57 am, /\/\o\/\/ [MVP] <o...@discussions.microsoft.com> wrote: > > I'm a little puzzled by where -match and -replace come from, as they > > are not native to powershell and do not appear to be members of the > > string class either. Do they belong to an object - I can't find the > > documentation in MSDN 2005? > > they asre native powershell operators, for more information see : > > Get-Help about_operator > > Greetings /\/\o\/\/ > > "Duncan Smith" wrote: > > > > There isn't a native PowerShell cmdlet that replaces strings in files in place. However there is a -replace operator that provides the basic replace functionality. You will need to do this in several steps: > > > > $pattern = 'some search pattern - could be regex' > > > $replacement = 'some replacement potentially using capture groups like so $1 $2 or ${namedGroup}' > > > foreach ($file in (gci c:\temp\* -rec)) { > > > $text = get-content $file > > > if ($text -match $pattern) { > > > $text -replace $pattern, $replacement > $file > > > } > > > > } > > > That looks interesting, I was still thinking of a solution using the > > Win32 Unix tools find, egrep and sed, bur their sed implementation > > didn't update files in place so it all fell a bit flat.. > > > I'm a little puzzled by where -match and -replace come from, as they > > are not native to powershell and do not appear to be members of the > > string class either. Do they belong to an object - I can't find the > > documentation in MSDN 2005? > > > Thanks, > > > Duncan. Thanks ;-) |
My System Specs![]() |
| | #6 (permalink) |
| | Re: Find/Replace On Mar 22, 11:52 pm, "Keith Hill" <r_keith_h...@mailhot.nospamIdotcom> wrote: > <eric.eickh...@sbcglobal.net> wrote in messagenews:1174589436.498853.183440@n76g2000hsh.googlegroups.com... > > Hello, > > > I am just learning PowerShell and need a little guidance. > > > What I am trying to do is to search a directory recursively for files > > that contain a text string and modify the file(s) by replacing that > > string with other text. > > > To do the search, I can use: > > > dir -r c:\temp\* | Select-string "xyz" > > > but from there, I am not sure how to go about doing the replace in > > each file found. > > > Can anyone point me in the right direction to accomplish this? > > There isn't a native PowerShell cmdlet that replaces strings in files in place. However there is a -replace operator that provides the basic replace functionality. You will need to do this in several steps: > > $pattern = 'some search pattern - could be regex' > $replacement = 'some replacement potentially using capture groups like so $1 $2 or ${namedGroup}' > foreach ($file in (gci c:\temp\* -rec)) { > $text = get-content $file > if ($text -match $pattern) { > $text -replace $pattern, $replacement > $file > } > > } > > -- > Keith Thanks Keith! I think this function takes what you wrote and expresses it in an easy to reuse way (if not a little harder to read): function Replace-String($find, $replace, $includes) { get-childitem $includes | select-string $find -list |% { (get- content $_.Path) |% { $_ -replace $find, $replace } | set-content $_.Path } } http://www.aaronlerch.com/blog/2007/...-function.html |
My System Specs![]() |
![]() |
| Thread Tools | |
| |
Similar Threads | ||||
| Thread | Forum | |||
| find/replace on file | VB Script | |||
| find and replace a specific string in multiple files | VB Script | |||
| Advanced find and replace using VBScript | VB Script | |||
| Find & Replace in MSSQL Tables through PowerShell | PowerShell | |||
| Find and Replace Utility ? | Vista General | |||