我有一个包含以下数据的文本文件:
test|wdthe$muce
check|muce6um#%
如何检查test
之类的特定字符串,并将|
符号后面的文本检索到PowerShell脚本中的变量?
并且,
如果假设有变量$from=test@abc.com以及如何通过在“@”之前拆分文本来搜索文件?
答案 0 :(得分:1)
这可能是一种可能的解决方案
$filecontents = @'
test|wdthe$muce
check|muce6um#%
'@.split("`n")
# instead of the above, you would use this with the path of the file
# $filecontents = get-content 'c:\temp\file.txt'
$hash = @{}
$filecontents | ? {$_ -notmatch '^(?:\s+)?$'} | % {
$split = $_.Split('|')
$hash.Add($split[0], $split[1])
}
$result = [pscustomobject]$hash
$result
# and to get just what is inside 'test'
$result.test
*注意:这可能仅在文件中每行只有一行时才有效。如果您收到错误,请尝试使用其他方法
$search = 'test'
$filecontents | ? {$_ -match "^$search\|"} | % {
$_.split('|')[1]
}
答案 1 :(得分:0)
首先,您需要阅读文件中的文字。
$content = Get-Content "c:\temp\myfile.txt"
然后你想要抓住每个匹配线的后管部分。
$postPipePortion = $content | Foreach-Object {$_.Substring($_.IndexOf("|") + 1)}
因为它是PowerShell,你也可以将它连接起来而不是使用变量:
Get-Content "C:\temp\myfile.txt" | Foreach-Object {$_.Substring($_.IndexOf("|") + 1)}
以上假设您碰巧知道每一行都包含一个|
字符。如果不是这种情况,则只需选择具有该字符的行,如下所示:
Get-Content "C:\temp\myfile.txt" | Select-String "|" | Foreach-Object {$_.Line.Substring($_.Line.IndexOf("|") + 1)}
(您现在需要使用$_.Line
而不是$_
因为Select-String返回MatchInfo对象而不是字符串。)
希望有所帮助。祝你好运。
答案 2 :(得分:0)
gc input.txt |? {$_ -match '^test'} |% { $_.split('|') | select -Index 1 }
or
sls '^test' -Path input.txt |% { $_.Line.Split('|') | select -Index 1 }
or
sls '^test' input.txt |% { $_ -split '\|' | select -Ind 1 }
or
(gc input.txt).Where{$_ -match '^test'} -replace '.*\|'
or
# Borrowing @Anthony Stringer's answer shape, but different
# code, and guessing names for what you're doing:
$users = @{}
Get-Content .\input.txt | ForEach {
if ($_ -match "(?<user>.*)\|(?<pwd>.*)") {
$users[$matches.user]=$matches.pwd
}
}
$users = [pscustomobject]$users