>我正在尝试在任何两行中搜索两个字符串,需要帮助。
"Airport"
和"Rate"
两个搜索字符串,示例输入文件如下所述:
输入文件内容 :
1. Airport
2. Rate
3. Some text
4. Some more text
5. Airport
6. Some text
期望输出 :
1. Airport
2. Rate
附言 5.
Airport
关键字不在所需的输出中,因为4.
和6.
没有Rate
关键字。
这就是我到目前为止得到它的方式:
PS> get-content "c:Inputfile.txt" | select-string "Airport" -context 1 | s
elect-string "Rate" > c:airportrate.txt
Thanks.
使用 V3:
$Text = Get-Content "c:Inputfile.txt" -Raw
[regex]$regex = '(?m)(^d+.sAirport.*?nd+.sRate.*?)'
$regex.Matches($Text).value
从获取帮助获取内容 (V3)
-生 忽略换行符,并在一个字符串中返回文件的全部内容。默认情况下,文件的内容以由换行符分隔的字符串数组的形式返回。
Raw 是文件系统提供程序添加到获取内容 cmdlet 的动态参数。此参数仅适用于文件系统驱动器。
此参数在 Windows PowerShell 3.0 中引入。
尝试这样的事情,我已经对您的输入进行了测试并得到了正确的输出。
$reader = [System.IO.File]::OpenText("c:Inputfile.txt")
$prevLine = ""
try {
for(;;) {
$line = $reader.ReadLine()
if ($prevLine -ne "")
{
if ($line -Match "Rate")
{
if ($prevLine -Match "Airport")
{
$prevLine
$line
}
}
}
$prevLine = $line
}
}
finally {
$reader.Close()
}
到期信用:https://stackoverflow.com/a/4192419/770270
以两行的块读取文件内容,将每个块转换为字符串并测试它是否符合您的条件:
PS> Get-Content .lines.txt -ReadCount 2 | Where-Object {"$_" -match 'Airport.*rate' }
1. Airport
2. Rate