使用powershell删除csv中的空格和列

Delete spaces and column in csv with powershell

我正在尝试使用 powershell 将下载的“.txt”文件转换为美观实用的“.csv”文件。我很好地完成了这项任务,但在实现目标之前不久,我遇到了一些我无法解决的问题。

这是一个包含 mac 地址的 OUI 部分及其名称的列表。 这是它的样子(没有引用):

" 00-00-00   "  EMPTY COLUMN    "XEROX CORPORATION"
" 00-00-01   "  EMPTY COLUMN    "XEROX CORPORATION"

我现在的第一个问题是,如何去掉OUI-address 栏中的空格。第二个,如何删除空栏

最后应该是这样的(没有引用):

"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.

希望你能帮助我。

这是一种方法,使用 Get-ContentSelect-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 的参数)如何提取子字符串。