什么是*Nix';切割';Powershell中的命令?

什么是*Nix';切割';Powershell中的命令?,powershell,split,powershell-2.0,Powershell,Split,Powershell 2.0,我在配置文件(sample.cfg)中有以下内容 我试图通过在PowerShell中使用拆分,在:之后存储一个each值。但我不能生产需要的产品 有人能告诉我如何使用PowerShellsplit解决上述问题吗?您可以使用Get Content读取文件的内容,然后通过管道将每一行传输到每个对象的ForEach,然后在每一行上使用split命令,将数组中的第二项如下所示: $filename = "sample.cfg" Get-Content $filename | ForEach-Objec

我在配置文件(sample.cfg)中有以下内容

我试图通过在PowerShell中使用
拆分
,在
之后存储一个each值。但我不能生产需要的产品


有人能告诉我如何使用PowerShell
split
解决上述问题吗?

您可以使用
Get Content
读取文件的内容,然后通过管道将每一行传输到每个对象的
ForEach
,然后在每一行上使用split命令,将数组中的第二项如下所示:

$filename = "sample.cfg"

Get-Content $filename | ForEach-Object {
    $_.split(":")[1]
}
输出

300
2
10.0.0.9
1840
All Values:

Name                           Value                                                                                             
----                           -----                                                                                             
port                           1840                                                                                              
min                            2                                                                                                 
server                         10.0.0.9                                                                                          
hour                           300                                                                                               

Individual value:
1840
更新

我更喜欢@AnsgarWiechers的方法,但是如果您确实需要特定命名的值,您可以创建一个哈希表并用值替换名称:

$configValues = @{
    hour    = "Time_Zone_Variance(Mins)"
    min     = "Alert_Interval(Mins)"
    server  = "Server"
    port    = "Port"
}

Get-Content $filename | ForEach-Object {

    # Courtesy of Ansgar Wiechers
    $key, $value = $_ -split ':', 2

    foreach($configValuesKey in $($configValues.keys)) {
        if ($configValues[$configValuesKey] -eq $key)
        {
            $configValues[$configValuesKey] = $value
        }
    }
}

write-host "`nAll Values:"
$configValues
write-host "`nIndividual value:"
$configValues.port
输出

300
2
10.0.0.9
1840
All Values:

Name                           Value                                                                                             
----                           -----                                                                                             
port                           1840                                                                                              
min                            2                                                                                                 
server                         10.0.0.9                                                                                          
hour                           300                                                                                               

Individual value:
1840

我想您不想只拆分行,而是实际创建键/值对。这可以通过以下方式实现:

$config = @{}
Get-Content 'C:\path\to\sample.cfg' | % {
  $key, $value = $_ -split ':', 2
  $config[$key] = $value
}
您还可以使用cmdlet:

-replace
操作是必要的,因为
convertfromstringdata
要求键和值之间用
=
分隔。如果您可以将配置文件中的分隔符从
更改为
=
,则可以使用
ConvertFrom-StringData$\
而无需替换。

这是怎么回事

function cut {
  param(
    [Parameter(ValueFromPipeline=$True)] [string]$inputobject,
    [string]$delimiter='\s+',
    [string[]]$field
  )

  process {
    if ($field -eq $null) { $inputobject -split $delimiter } else {
      ($inputobject -split $delimiter)[$field] }
  }
}


PS C:\> 'hi:there' | cut -f 0 -d :
hi

PS C:\> 'hi:there' | cut -f 1 -d :
there

PS C:\> 'hi:there' | cut -f 0,1 -d :
hi
there

PS C:\> 'hi:::there' | cut -f 0 -d :+
hi

PS C:\> 'hi   there' | cut
hi
there

对于更简洁的语法,这也可以做到:

((获取内容“your file.txt”)-Split):[1]
因此,使用
-Split
方法的诀窍是让
获取内容
返回一个
字符串
对象(实际上也可以使用别名
cat
),然后从得到的
字符串[]
对象中使用括号提取
n
第项


注意:由于
-Split
不是该命令的参数名称,因此使用
-Split
而不在
获取内容
周围加括号将不起作用。。。David谢谢,您能告诉我如何将每个值存储在变量中,如
$hour=300、$min=2、$server=10.0.0.9、$port=1840
对于单独命名的变量,您可以执行
$configValues.Keys |%{New variable-Name$\uvalue$configValues[$\u]}
。它接近“剪切”-只应插入新行字符。输入为一行,输出为所选字段数的行数+1。输出实际上是一个数组,但powershell以这种方式显示。