如何在bash中匿名化文件中的所有密码

时间:2013-09-19 08:40:38

标签: string bash replace sed awk

假设您有一个包含密码和其他分类数据的大型配置文件。该文件将来可能会更改。我想用占位符替换这种数据,例如***使用bash创建当前配置的版本而不包含分类信息。

该文件的格式为:

user_foo=Foo
foo_pwd=12345
user_bar=Bar
bar_password_x=42
a.passwd=asdf

并且应该转换为

user_foo=Foo
foo_pwd=***
user_bar=Bar
bar_password_x=***
a.passwd=***

某些脚本接受包含在受让人左侧的字符串黑名单(例如“pwd”,“password”,“passwd”)可能就是这样做的。

不幸的是,我不是bash的专家,但也许有一个基于sed或awk的优雅解决方案。

3 个答案:

答案 0 :(得分:3)

尝试:

awk 'BEGIN{FS="="; OFS="="; } $1 ~ /pwd|password|passwd/ {$2="***"}1' inputfile

对于您的输入,它应该发出:

user_foo="Foo"
foo_pwd=***
user_bar="Bar"
bar_password_x=***
a.passwd=***

答案 1 :(得分:2)

使用sed:

sed -r 's/((pwd|password|passwd)[^=]*=).*/\1***/' input > output

答案 2 :(得分:1)

使用awk

awk -F= '$1~/pwd|password|passwd/ {$2="***"}1' OFS="="
user_foo=Foo
foo_pwd=***
user_bar=Bar
bar_password_x=***
a.passwd=***