我有一个这样的字符串: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,但我想知道是否有一种更惯用的方法来做到这一点。请注意,我不想删除捕获的组,只需用星号替换它们,从而非常清楚地表明该命令不是错误的,而是出于安全目的而混淆的。
发布于 2017-08-03 05:25:43
def cmd='docker login -u username -p password docker-registry-url'
println cmd.replaceAll(/(\s-[up]\s+)(\S+)/,'$1***')输出:
docker login -u *** -p *** docker-registry-url发布于 2017-08-03 06:01:45
我自己发现了以下解决方案,使用的是积极的前瞻性:
def cmd = "docker login -u username -p password docker-registry-url"
println cmd.replaceAll(/(?<=-[up]\s)(\S+)/,"***")https://stackoverflow.com/questions/45473822
复制相似问题