Powershell 当单词匹配时,检索它后面的可变字符串
我有一个查询,如下所示:Powershell 当单词匹配时,检索它后面的可变字符串,powershell,loops,foreach,split,match,Powershell,Loops,Foreach,Split,Match,我有一个查询,如下所示: 来自表a 内连接表B 表A.xx=表B.xx 内联接表 表a.yy=表c.yy 我正在尝试编写一个脚本来选择单词“JOIN”后面的表 我现在写的脚本是: $data=获取内容-路径query1.txt $dataconv=“$data.ToLower()-替换“\s+”,“” $join=0 $overigetabellen=($dataconv)| foreach{ 如果($\匹配“join(.*)”){ $join++ $join=$matches[1]。拆分(“
来自表a
内连接表B
表A.xx=表B.xx
内联接表
表a.yy=表c.yy
我正在尝试编写一个脚本来选择单词“JOIN”后面的表
我现在写的脚本是:
$data=获取内容-路径query1.txt
$dataconv=“$data.ToLower()-替换“\s+”,“”
$join=0
$overigetabellen=($dataconv)| foreach{
如果($\匹配“join(.*)”){
$join++
$join=$matches[1]。拆分(“”[0]
#写入已联接的“主机”表:“$join”
$join
}
}
$overigetabellen
这只给了我第一张桌子,所以是桌子B。
谁能帮我把第二张表也作为输出 这是我寻找所需表名的天真尝试 将在空白处输入的数据拆分为一个数组,找到单词“JOIN”的索引,然后访问单词“JOIN”后面的以下索引 产出: 表B 表C 如果需要不同的输入文件,您可以根据需要调整大小写(将输入设置为所有小写字母)等。使用以下方法处理数据:
$data |选择String-AllMatches-Pattern'(?是否正在查找(获取内容-路径query1.txt |其中对象{$|-match'JOIN'})-替换“^.*JOIN\s(.*))$',“$1”
?非常感谢!这确实适用于表名为TableA的情况。如果联接后的单词是table.A,则它将不起作用。@Nab显然,如果表名可能也包含非单词字符,则需要调整模式。请参阅更新的答案。
$data = Get-Content -Path query1.txt
$indices = @()
$output = @()
$dataarray = $data -split '\s+'
$singleIndex = -1
Do{
$singleIndex = [array]::IndexOf($dataarray,"JOIN",$singleIndex + 1)
If($singleIndex -ge 0){$indices += $singleIndex}
}While($singleIndex -ge 0)
foreach ($index in $indices) {
$output += $dataarray[$index + 1]
}
$data | Select-String -AllMatches -Pattern '(?<=join\s+)\S+' |
Select-Object -Expand Matches |
Select-Object -Expand Groups |
Select-Object -Expand Value