Riddle me this:
I have a text file of data. I want to read it in, and only output lines that contain any string that is found in an array of search terms.
If I
without regex and with spaces possible:
$array = @("foo", "bar", "hello world")
get-content afile | where { foreach($item in $array) { $_.contains($item) } } > FilteredContent.txt
Try Select-String
. It allows an array of patterns. Ex:
$p = @("this","is","a test")
Get-Content '.\New Text Document.txt' | Select-String -Pattern $p -SimpleMatch | Set-Content FilteredContent.txt
Notice that I use -SimpleMatch
so that Select-String
ignores special regex-characters. If you want regex in your patterns, just remove that.
For a single pattern I would probably use this, but you have to escape regex characters in the pattern:
Get-Content '.\New Text Document.txt' | ? { $_ -match "a test" }
Select-String
is a great cmdlet for single patterns too, it's just a few characters longer to write ^^
$a = @("foo","bar","baz")
findstr ($a -join " ") afile > FilteredContent.txt
Any help?
$a_Search = @(
"TextI'mLookingFor",
"OtherTextI'mLookingFor",
"MoreTextI'mLookingFor"
)
[regex] $a_regex = ‘(‘ + (($a_Search |foreach {[regex]::escape($_)}) –join “|”) + ‘)’
(get-content afile) -match $a_regex