首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy:替换捕获组的惯用方法

Groovy:替换捕获组的惯用方法
EN

Stack Overflow用户
提问于 2017-08-03 02:26:35
回答 2查看 9.6K关注 0票数 9

我有一个这样的字符串:docker login -u username -p password docker-registry-url

我使用execute在Groovy脚本中执行该命令。为了调试目的,我在执行命令之前打印命令,但是由于它包含敏感数据,所以我混淆用户名和密码。

代码语言:javascript
复制
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,但我想知道是否有一种更惯用的方法来做到这一点。请注意,我不想删除捕获的组,只需用星号替换它们,从而非常清楚地表明该命令不是错误的,而是出于安全目的而混淆的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-03 05:25:43

代码语言:javascript
复制
def cmd='docker login -u username -p password docker-registry-url'
println cmd.replaceAll(/(\s-[up]\s+)(\S+)/,'$1***')

输出:

代码语言:javascript
复制
docker login -u *** -p *** docker-registry-url
票数 13
EN

Stack Overflow用户

发布于 2017-08-03 06:01:45

我自己发现了以下解决方案,使用的是积极的前瞻性:

代码语言:javascript
复制
​def cmd = "docker login -u username -p password docker-registry-url"
println cmd.replaceAll(/(?<=-[up]\s)(\S+)/,"***")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45473822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档