假设卷影文件已复制到的不同位置
sudo cp /etc/shadow ~
要检查用户是否有密码,我们只需cat
即可。然而,为了不让人们担心复制他们的/etc/shadows
,我需要屏蔽密码哈希。这肯定需要regex。。。。。。。
john:$6$iTEFbMTM$CXmxPwErbEef9RUBvf1zv8EgXQdaZg2eOd5uXyvt4sFzi6G4lIqavLilTQgniAHm3Czw/LoaGzoFzaMm.YwOl/:17707:0:90:14:::
jane:*:99999:0:90:14:::
有人能帮我用正则表达式替换sed或awk命令的密码哈希吗?
编辑:忘记添加密码字段为*
的密码不应被替换(因为它们无论如何都不是密码(。
sed -i 's/REGEX/MASKINGTEXT/g' ~/shadow
预期结果:
john:MASKINGTEXT:17707:0:90:14:::
jane:*:99999:0:90:14:::
如果它总是第二个字段,那么为什么不通过awk
只更改第二个域本身来保持简单呢。
sudo awk 'BEGIN{FS=OFS=":"} {$2="your_new_value_here"} 1' Input_file
第二条警告:根据@David sir的评论:请不要使用原地编辑,你可以在终端上打印输出,然后可以使用适当的工具编辑/创建新的/etc/shadow文件。
第一次警告:首先运行上面的命令,若您对结果满意,那个么您可以将输出保存到Input_file本身中。如果您使用的是最新版本,您也可以对上面的代码使用gawk -i inplace
,将输出保存到Input_file本身中。
使用sed
:
sudo cat /etc/shadow | sed -E 's/^([^:]+:)([^:]+)(..+)$/1redacted3/g'
编辑(不必要的cat
命令(:
sudo sed -E 's/^([^:]+:)([^:]+)(..+)$/1redacted3/g' /etc/shadow