我试图转换下载的" .txt"归档为好看且有用的#34; .csv"使用powershell的文件。我完成了这项任务,但在目标出现前不久,我遇到了一些我无法解决的问题。
这是一个包含OUI-part mac-addresses及其名称的列表。 这是它的样子(没有引用):
" 00-00-00 " EMPTY COLUMN "XEROX CORPORATION"
" 00-00-01 " EMPTY COLUMN "XEROX CORPORATION"
我现在的第一个问题是,如何获取OUI地址列中的空格。第二个,如何删除空列。
最后它应该看起来像这样(没有引用):
"00-00-00" "XEROX CORPORATION"
"00-00-01" "XEROX CORPORATION"
这样我们在第一列中没有任何空格的OUI,在第二列中有公司的名称。但是这里名称中有空格很重要。
原始文件内容:
00-00-09 XEROX CORPORATION
00-00-0A OMRON TATEISI ELECTRONICS CO.
00-00-0B MATRIX CORPORATION
00-00-0C CISCO SYSTEMS, INC.
我希望你能帮助我。
答案 0 :(得分:0)
以下是一种方法,使用带有正则表达式的Get-Content
和Select-String
来提取子字符串:
get-content "test.txt" | foreach-object {
$_ | select-string '\s*((?:[0-9a-f]{2}-){2}[0-9a-f]{2})\s+(.+)$' | foreach-object {
$oui = $_.Matches[0].Groups[1].Value
$description = $_.Matches[0].Groups[2].Value
}
new-object PSObject -property @{
"OUI" = $oui
"Description" = $description
} | select-object OUI,Description
}
对于包含引用字符串对的输出,请将New-Object
替换为格式化字符串;例如:
get-content "test.txt" | foreach-object {
$_ | select-string '\s*((?:[0-9a-f]{2}-){2}[0-9a-f]{2})\s+(.+)$' | foreach-object {
$oui = $_.Matches[0].Groups[1].Value
$description = $_.Matches[0].Groups[2].Value
}
'"{0}" "{1}"' -f $oui,$description
}
您可以使用正则表达式测试器(例如https://www.regex101.com/)来查看正则表达式(即Select-String
的参数)如何提取子字符串。