Groovy: Idiomatic way to replace captured groups

Viewed 9339

I've a string like this: docker login -u username -p password docker-registry-url.

I execute the command in a Groovy script with execute. For debugging purposes, I print the command before execution, but since it contains sensitive data, I obfuscate the username and password.

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, "***") }
}

The above works as expected and prints docker login -u *** -p *** docker-registry-url, but I'm wondering if there is a more idiomatic way to do this. Note that I don't want to delete the captured groups, just replace them with asterisks, thus making it very clear that the command is not wrong, but obfuscated for security purposes.

2 Answers
Related