首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用散列值替换文件中的匹配。

用散列值替换文件中的匹配。
EN

Stack Overflow用户
提问于 2013-12-17 13:08:52
回答 2查看 207关注 0票数 1

我偶然发现了一个我有很大弱点的问题。我没有达到这一目标所需的忍者技能:

我正在处理一个Freeradius用户文件,您可以在其中为VPN客户端存储用户名、密码和其他设置。所以这个文件中的记录是这种格式的:

代码语言:javascript
复制
vpnclient       Cleartext-Password := "ComplexPassword"
                Service-Type = Outbound-User,
                Framed-IP-Address = 172.16.0.225,
                Framed-IP-Netmask = 255.255.255.255,
                Cisco-AVPair += "ipsec:inacl=IPSEC_EXTRANET",
                Cisco-AVPair += "ipsec:dns-servers=192.168.1.31 192.168.1.32",
                Cisco-AVPair += "ipsec:split-dns=mydomain.com",
                Cisco-AVPair += "ipsec:split-dns=yourdomain.com"

我希望从中提取Cleartext-Password := "ComplexPassword"位,并用相应的MD5哈希值替换密码。同时,我还想将Cleartext-Password替换为MD5-Password。因此,在处理完之后,我希望文件中的记录如下所示:

代码语言:javascript
复制
vpnclient       MD5-Password := "be2cb07387a0574f11772a5b3540845c"
                Service-Type = Outbound-User,
                etc.

所以说真的,我只想找到一个regex匹配,处理它并按下它,而不是在一个文件中的原始值。我认为,在许多其他情况下,这也是很方便的。问题是,我不知道是否可能使用外部命令或函数替代sed和类似的部分内容。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-17 13:36:12

代码语言:javascript
复制
awk '/Cleartext-Password/{
    match($0,/"(.*)"/,a)
    passw=a[1]
   ("echo "passw " | md5sum") |& getline var
   split (var,b)
   sub(/".*"/,"\""b[1]"\"")
} 1 ' input.txt
票数 2
EN

Stack Overflow用户

发布于 2013-12-17 13:27:00

使用awk:

代码语言:javascript
复制
awk -F' *:= *' '$1~/Cleartext-Password/{gsub(/"/, "", $2); printf "%s := \"", $1;
    system("md5 <<< \"" $2 "\"|tr -d \"\\n\""); print "\"";next}1' vpnfile

vpnclient       Cleartext-Password := "be2cb07387a0574f11772a5b3540845c"
                Service-Type = Outbound-User,
                Framed-IP-Address = 172.16.0.225,
                Framed-IP-Netmask = 255.255.255.255,
                Cisco-AVPair += "ipsec:inacl=IPSEC_EXTRANET",
                Cisco-AVPair += "ipsec:dns-servers=192.168.1.31 192.168.1.32",
                Cisco-AVPair += "ipsec:split-dns=mydomain.com",
                Cisco-AVPair += "ipsec:split-dns=yourdomain.com"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20635054

复制
相关文章

相似问题

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