View Single Post
Old 12-20-2007   #6 (permalink)
Xavier


 
 

Re: New lines in regular expressions

Thank you both for your input.

I find it very confusing that this doesn't work :

PS C:\Users\Xavier\Desktop> $somevar = "power`nshell`nrocks"
PS C:\Users\Xavier\Desktop> select-string -inputobject $somevar -pattern
"power`nshell" -quiet
True
PS C:\Users\Xavier\Desktop> set-content test.txt $somevar
PS C:\Users\Xavier\Desktop> get-content test.txt
power
shell
rocks
PS C:\Users\Xavier\Desktop> get-content test.txt | select-string "power"
-quiet
True
PS C:\Users\Xavier\Desktop> get-content test.txt | select-string
"power\nshell" -quiet
PS C:\Users\Xavier\Desktop> get-content test.txt | select-string
"power`nshell" -quiet
PS C:\Users\Xavier\Desktop>

So the pattern matches the variable content, but not the file content.
From what I understand, this is because the first variable is a string, and
the second is an array.
Keith's solution will work in that case :

PS C:\Users\Xavier\Desktop> $lines = get-content test.txt
PS C:\Users\Xavier\Desktop> $text = [string]::Join("`n", $lines)
PS C:\Users\Xavier\Desktop> select-string -inputobject $text -pattern
"power`nshell" -quiet
True

Thanks a lot,
Xavier


"Shay Levi" wrote:
Quote:

>
> # create a here-string with line breaks
> PS:23 >$hs = @"
> power
> shell
> rocks!
> "@
>
>
> PS:24 >$hs
> power
> shell
> rocks
>
> # test for line break , same as $hs -match "`n"
> PS:25 >$hs -match "\n"
> True
>
> PS:26 >$hs -match "power\n"
> True
>
> # replace
> PS:27 >$new = $hs -replace "power\n","power"
> PS:28 >$new
> powershell
> rocks!
>
> # same applies with `n
> PS:29 >$new = $hs -replace "power`n","power"
> PS:30 >$new
> powershell
> rocks!
>
> # find string with line break
> PS:39 >Select-String -InputObject $new -Pattern "powershell\n" -Quiet
> True
>
>
> # same with `n
> PS:40 >Select-String -InputObject $new -Pattern "powershell`n" -Quiet
> True
>
>
> -----
> Shay Levi
> $cript Fanatic
> http://scriptolog.blogspot.com
> Hebrew weblog: http://blogs.microsoft.co.il/blogs/scriptfanatic
>
>
>
Quote:

> > Hello,
> >
> > I am trying to search for a string pattern that includes new lines
> > with the select-string cmdlet. I was looking for something like \n to
> > match a new line in the regular expression but I can't seem to find
> > anything.
> >
> > Also, what would be the general syntax to include a new line in a
> > string (not speaking of regular expressions here) ?
> >
> > Any help is appreciated.
> >
> > Thanks,
> > Xavier
>
>
>
My System SpecsSystem Spec