我有一个名为:test_file.txt的文件。第二行有 4 个管道分隔符,除第二行外的所有其他行都有 3 个管道分隔符。 我只想输出第 2 行,因为它比其他行多一个分隔符。
$colCnt = "C:test.txt"
[int]$LastSplitCount = $Null
Get-Content $colCnt | ?{$_} | Select -Skip 1 | %{if($LastSplitCount -and !
($_.split("|").Count -eq $LastSplitCount))
{"Process stopped at line number $($_.psobject.Properties.value[5]) for column count mis-match.";break}
elseif(!$LastSplitCount){$LastSplitCount = $_.split("|").Count}}
如果你的文本文件看起来像这样:
blah|using|three|delimiters blah|using|four |delimiter |characters blah|using|three|delimiters blah|using|four |delimiter |characters blah|using two |delimiters
以下代码应输出具有更多(或更少(超过 3 个|
分隔符的行:
$line = 0
switch -Regex -File "C:test.txt" {
'^(?:[^|]*|){3}[^|]*$' { $line++ } # this line is OK, just increase the line counter
default { "Bad delimiter count in line {0}: '{1}'" -f ++$line, $_ }
}
输出:
Bad delimiter count in line 2: 'blah|using|four |delimiter |characters' Bad delimiter count in line 4: 'blah|using|four |delimiter |characters' Bad delimiter count in line 5: 'blah|using two |delimiters'
正则表达式详细信息:
^ 字符串开头的断言位置 (?:匹配下面的正则表达式 [^|] 匹配任何不是"|"的字符 *在零次和无限次之间,尽可能多地回馈,根据需要回馈(贪婪( \| 从字面上匹配字符"|" ({3} 正好 3 次 [^|] 匹配任何不是"|"的字符 *在零次和无限次之间,尽可能多地回馈,根据需要回馈(贪婪( $ 断言字符串末尾的位置(或字符串末尾的换行符之前,如果有(