我仍然非常学习Powershell,对于使用命令我有些迷茫。 我有这个
docker login -u AWS -p PASSWORD -e none number.dkr.ecr.REGION.amazonaws.com
,我想选择“密码”。 理想情况下,我希望此PASSWORD进入文件,然后在以后使用(但我可以这样做)。
我迷失了要使用的命令。我知道awk'{print $ 6}'可以工作,但是我在使用Windows机器时需要Powershell。
我知道这是一个非常简单的问题,我一直在阅读答案,但是我对不同的参数以及不同的人的不同方式感到困惑,而且Powershell很棒,但我仍在学习。
非常感谢!
答案 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"
}