如何读取txt文件中的两个特殊字符与Powershell之间的线
嗨,我几乎是Powershell的新手。 我需要阅读一些文本文件中的特定行,并将它们放到不同的数组中。 我有一个文件看起来像这样:如何读取txt文件中的两个特殊字符与Powershell之间的线
[Servers] Server1
Server2
Server3
Server4
[IP]
10.10.10.10
10.10.10.20
10.10.30.30
192.168.1.2
192.168.1.4
[Path]
C:\Log\*.log
D:\Files\*.txt
D:\Files\*.csv
D:\Files\*.xml
[Gateway]
10.10.10.1
10.10.30.2
192.168.1.1
我的问题是,我需要在[Servers]
读取线(有时3线,有时更多),并把这些在一个阵列。 当我不知道行数时,如何选择[Servers]
和[IP]
之间的所有行?
回答:
密切相关:Grabbing specific sections of a txt file via Powershell
如果它是可以接受的第一个将整个文件读入内存:
$regex = '(?ms)\A.*?^\[Servers\]\s*\r?\n(.*?)(?:\r?\n\[.*|(?:\r?\n)?\Z)' $servers = (Get-Content -Raw file.txt) -replace $regex, '$1' -split '\r?\n'
重构为一个简单的功能接受输入文件和的名字感兴趣的部分:
function get-SectionLines([string] $LiteralPath, [string] $SectionName) { $regex = '(?ms)\A.*?^\[{0}\]\s*\r?\n(.*?)(?:\r?\n\[.*|(?:\r?\n)?\Z)' -f [regex]::Escape($SectionName)
(Get-Content -Raw -LiteralPath $LiteralPath) -replace $regex, '$1' -split '\r?\n'
}
$servers = get-SectionLines file.txt Servers
说明:
Get-Content -Raw
读取整个文件到内存中单个字符串。-replace
然后操作在那一个多行字符串,使用正则表达式(正则表达式)来匹配整个输入字符串,具有匹配的兴趣仅线捕获组((...)
),并且更换整个只有捕获组的字符串,有效地返回该部分的行。- 最后,
-split '\r?\n'
将提取的多行字符串拆分为行数组。内联的正则表达式的选项
(?sm)
匝上都米 ULTI线和小号英格尔行选项:正则表达式的说明
m
表示^
和$
matc h每个行的起始和结尾而不是整个输入字符串。s
意味着元字符.
\n
字符匹配也是如此,从而使诸如.*
一个表达式可以用于匹配跨行。
\A
的(多线)输入的一开始相匹配,和\Z
最后。\r?\n
匹配单个换行符,CRLF和LF变量。(.*?)
是捕获组(非贪婪)捕获部分内的所有内容。(?:\r?\n\[.*|(?:\r?\n)?\Z)
使用非捕获组((?:...)
)感兴趣的部分,它可以是所述下部(换行之后是[
)的开始或结束后,以匹配一切的输入文件(无论是否有尾随换行符)。注意,正则表达式的整个输入字符串匹配,然后与感兴趣刚子(范围),在第一次(也是唯一一个)捕获组(
$1
)抓获替换它。
回答:
法经典:
$found=$false $Listword=(gc C:\temp\list.txt).Split("[]".ToCharArray())
$Servers=foreach ($item in $Listword)
{
if ($item -eq "IP") { break }
if ($item -eq "Servers") {$found=$true; continue}
if ($found) {$item}
}
$Servers
以上是 如何读取txt文件中的两个特殊字符与Powershell之间的线 的全部内容, 来源链接: utcz.com/qa/257702.html