Windows Vista Forums
Vista Forums Home Join Vista Forums Windows 7 Forum Vista Tutorials Tags
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.

Go Back   Vista Forums > Misc Newsgroups > PowerShell

Vista Tutorial - Find/Replace

Reply
 
Old 03-22-2007   #1 (permalink)
eric.eickhoff@sbcglobal.net
Guest


 
 

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 SpecsSystem Spec
Old 03-22-2007   #2 (permalink)
Keith Hill
Guest


 
 

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 SpecsSystem Spec
Old 03-23-2007   #3 (permalink)
Duncan Smith
Guest


 
 

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 SpecsSystem Spec
Old 03-23-2007   #4 (permalink)
/\/\o\/\/ [MVP]
Guest


 
 

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 SpecsSystem Spec
Old 03-23-2007   #5 (permalink)
Duncan Smith
Guest


 
 

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 SpecsSystem Spec
Old 03-28-2007   #6 (permalink)
aaronlerch@gmail.com
Guest


 
 

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 SpecsSystem Spec
Reply

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


Vista Forums is an independent web site and has not been authorized,
sponsored, or otherwise approved by Microsoft Corporation.
"Windows Vista", the Start Orb, and related materials are trademarks of Microsoft Corp.
© Designer Media Ltd

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46