使用powershell在文本文件中查找多行字符串

使用powershell在文本文件中查找多行字符串,powershell,Powershell,我正在尝试使用下面的脚本在文本文件中查找多行字符串,但它没有按预期工作 $tns= "MYSID= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = mydnshostname)(PORT = 1111)) ) (CONNECT_DATA = (SERVICE_NAME = MYSID) ) )" $SEL = Select-St

我正在尝试使用下面的脚本在文本文件中查找多行字符串,但它没有按预期工作

$tns= "MYSID=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = mydnshostname)(PORT = 1111))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = MYSID)
    )
  )"

$SEL = Select-String -Path T:\Test\search.txt -Pattern $tns


if ($SEL -ne $null)
{
    Write-Host "Contains String"
}
else
{
    Write-Host "Not Contains String"
} 

这取决于文件的行尾。在windows中,以
\r\n
结尾的行,一种方法是这样。如果匹配,它将返回整个文件

echo one '(two)' three four five | set-content file.txt
get-content -raw file.txt | select-string '\(two\)\r\nthree\r\nfour'

one
(two)
three
four
five
或者使用正则表达式单行模式
(?s)
,其中
可以匹配行尾。如果没有管道,选择字符串似乎无法匹配多行(
-path
参数)


这取决于文件的行尾。在windows中,以
\r\n
结尾的行,一种方法是这样。如果匹配,它将返回整个文件

echo one '(two)' three four five | set-content file.txt
get-content -raw file.txt | select-string '\(two\)\r\nthree\r\nfour'

one
(two)
three
four
five
或者使用正则表达式单行模式
(?s)
,其中
可以匹配行尾。如果没有管道,选择字符串似乎无法匹配多行(
-path
参数)


代码不起作用*当您使用
选择字符串
时,
-模式
是正则表达式模式。您的模式包含多个特殊的正则表达式字符[
()
]。尝试使用
-SimpleMatch
获取非正则模式匹配。或执行
选择字符串-模式$([regex]::Escape($tns))
请发布您正在使用的输入文件的真实示例,以及您希望从中获得的确切信息。我怀疑你真的想要整个多行字符串。我怀疑您可以使用更简单的模式来获取所需的实际信息。代码不起作用*当您使用
选择字符串时,
-pattern
是正则表达式模式。您的模式包含多个特殊的正则表达式字符[
()
]。尝试使用
-SimpleMatch
获取非正则模式匹配。或执行
选择字符串-模式$([regex]::Escape($tns))
请发布您正在使用的输入文件的真实示例,以及您希望从中获得的确切信息。我怀疑你真的想要整个多行字符串。我想你可以用一个更简单的模式来获得你想要的实际信息。