用于从竖线分隔的CSV文件中提取数据的脚本失败

时间:2015-08-14 10:43:24

标签: regex windows powershell

我创建了一个shell脚本,该脚本采用CSV文件并使用正则表达式匹配数据并将该数据输出到另一个CSV文件。但是,当我运行脚本时,我收到一条错误消息:

enter image description here

file_processor.ps1

$input_path = ‘c:\shell_scripting\input.csv’
$output_file = ‘c:\shell_scripting\output.csv’
$regex = ‘^(?:[^|]*\|){2}([^|]*)’
select-string -Path $input_path -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value } > $output_file

input.csv:

1|2|3|4|5|6||8|9|10

我检查了正则表达式并且它有效: http://www.regexr.com/3bj9p

1 个答案:

答案 0 :(得分:2)

该错误表明存在编码问题。很可能你的脚本中有印刷引号(请避免使用这些引号),并将其保存为UTF-8编码,不含BOM。因此,开头印刷报价(由UTF-8中的3个字节组成)被读取为3个字符(â€~)。如果没有引号,PowerShell不会将字符串识别为字符串并引发语法错误。