2017-08-03 8 views
3

私はこのような文字列を持っています:docker login -u username -p password docker-registry-urlGroovy:キャプチャされたグループを置き換えるための慣習的な方法

コマンドを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が、これを行うにはより多くの慣用的な方法がある場合、私は思ったんだけど。キャプチャされたグループを削除し、アスタリスクで置き換えるだけで、コマンドが間違っていないことを明確にしていますが、セキュリティ上の理由から難読化されています。

答えて

5
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 
+0

私は自分自身が正見ビハインドを使用して解決策を見つけました。あなたが私にそれを導くので、私はあなたの答えを受け入れるでしょう。 –

1

私は自分自身が正ルックの背後に使用して、次の解決策を見つけた:

​def cmd = "docker login -u username -p password docker-registry-url" 
println cmd.replaceAll(/(?<=-[up]\s)(\S+)/,"***") 
+1

'-u'と1+空白以外の文字の間に2つ以上のスペースがあると、あなたのルックバックアプローチは失敗します。グループアプローチをキャプチャするのは正しい方法です。 '/(?<= - [up] \ s {1,100})(\ S +)/'を使うかもしれませんが、Javaの正規表現ではむしろハックな機能です。 –

+0

@WiktorStribiżewおそらく、あなたはjavaのルック・バックが既知の長さでなければならないという事実を指しているので、\ s +は動作しません。代わりに\ s {1,10}を使用しました。私がdaggettの答えよりもこれを好むのは、IMOという要求がより明確に表現されているからです。 –

関連する問題