Groovy:替换捕获组的惯用方式
Groovy: Idiomatic way to replace captured groups
我有这样的字符串:docker login -u username -p password docker-registry-url
.
我使用 execute
在 Groovy 脚本中执行命令。出于调试目的,我在执行前打印命令,但由于它包含敏感数据,我混淆了用户名和密码。
def printableCmd = cmd.toString()
def m = printableCmd =~ /(?:.+) -u (.+) -p (.+) (?:.+)/
if (m.matches() && m[0].size() >= 3) {
printableCmd = m[0][-1..-2].inject(m[0][0]) { acc, val -> acc.replaceAll(val, "***") }
}
以上按预期工作并打印 docker login -u *** -p *** docker-registry-url
,但我想知道是否有更惯用的方法来执行此操作。请注意,我不想删除捕获的组,只是将它们替换为星号,从而非常清楚该命令没有错误,但出于安全目的进行了混淆。
def cmd='docker login -u username -p password docker-registry-url'
println cmd.replaceAll(/(\s-[up]\s+)(\S+)/,'***')
输出:
docker login -u *** -p *** docker-registry-url
我自己使用正面回顾找到了以下解决方案:
def cmd = "docker login -u username -p password docker-registry-url"
println cmd.replaceAll(/(?<=-[up]\s)(\S+)/,"***")
我有这样的字符串:docker login -u username -p password docker-registry-url
.
我使用 execute
在 Groovy 脚本中执行命令。出于调试目的,我在执行前打印命令,但由于它包含敏感数据,我混淆了用户名和密码。
def printableCmd = cmd.toString()
def m = printableCmd =~ /(?:.+) -u (.+) -p (.+) (?:.+)/
if (m.matches() && m[0].size() >= 3) {
printableCmd = m[0][-1..-2].inject(m[0][0]) { acc, val -> acc.replaceAll(val, "***") }
}
以上按预期工作并打印 docker login -u *** -p *** docker-registry-url
,但我想知道是否有更惯用的方法来执行此操作。请注意,我不想删除捕获的组,只是将它们替换为星号,从而非常清楚该命令没有错误,但出于安全目的进行了混淆。
def cmd='docker login -u username -p password docker-registry-url'
println cmd.replaceAll(/(\s-[up]\s+)(\S+)/,'***')
输出:
docker login -u *** -p *** docker-registry-url
我自己使用正面回顾找到了以下解决方案:
def cmd = "docker login -u username -p password docker-registry-url"
println cmd.replaceAll(/(?<=-[up]\s)(\S+)/,"***")