Powershell-从文本中选择一个特定的单词

时间:2019-04-01 15:23:32

标签: powershell

我仍然非常学习Powershell,对于使用命令我有些迷茫。 我有这个

docker login -u AWS -p PASSWORD -e none number.dkr.ecr.REGION.amazonaws.com 

,我想选择“密码”。 理想情况下,我希望此PASSWORD进入文件,然后在以后使用(但我可以这样做)。

我迷失了要使用的命令。我知道awk'{print $ 6}'可以工作,但是我在使用Windows机器时需要Powershell。

我知道这是一个非常简单的问题,我一直在阅读答案,但是我对不同的参数以及不同的人的不同方式感到困惑,而且Powershell很棒,但我仍在学习。

非常感谢!

3 个答案:

答案 0 :(得分:1)

data = data.frame(Black = rep(0, 5), Red = c(1,0,5,0,0), Blue = c(1,2,1,1,1), Green = c(1,1,2,2,2)) data$count = apply(data, 1, FUN = function(x) length(x[x>0])) 中的默认字段分隔符为空格,因此我们可以在PowerShell中执行相同的操作,然后获取第6个 子字符串。

为此,我们可以使用awk正则表达式运算符-它支持以下语法:

-split

[strings] -split [pattern]

在上述第二个示例中使用时,它默认为像-split [strings] 一样在空格上分割:

awk

如果将表达式包装在-split "docker login -u AWS -p PASSWORD -e none number.dkr.ecr.REGION.amazonaws.com" 中,则可以对其进行索引:

@()

或者我们可以使用$Password = @( -split "docker login -u AWS -p PASSWORD -e none number.dkr.ecr.REGION.amazonaws.com" )[5] cmdlet来抓取它:

Select-Object

但是,如果我们总是想紧紧抓住$Password = -split "docker login -u AWS -p PASSWORD -e none number.dkr.ecr.REGION.amazonaws.com" |Select-Object -Index 5 之后的子字符串而不是第6 字符串,则可以使用-p正则表达式运算符:

-replace

答案 1 :(得分:1)

您可以使其更加复杂:)我只是使用了简单的regexp,但您可以使其更好:)

$x = "docker login -u AWS -p PApSSWORD -e none number.dkr.ecr.REGION.amazonaws.com "
$x -match "(\-p[a-z0-9 ]*\-e)"
$matches[1] -replace '(\-p) ([a-z0-9 ]*) (\-e)' , ' $2'

答案 2 :(得分:1)

另一种使用正则表达式的解决方案,
lookarounds

$string = 'docker login -u AWS -p PASSWORD -e none number.dkr.ecr.REGION.amazonaws.com'
if ($string -match '(?<=-p\s+).*(?=\s+-e)'){
    $Password = $Matches.Value
} else {
    "No password found"
}