sed:替换两个字符串之间的文本,而无需编辑整行

问题描述 投票:0回答:1

我正在尝试制作Raspberry Pi配置器脚本(在第一次启动pi之前,并且我想实现一项功能来设置密码。我发现可以在/ etc / shadow下设置密码,但需要对其进行加密。

长话短说:

如何用sed仅替换两个字符串pi:和第二个之间的哈希?

pi:$6$FVPr/I.sQGI3ab3z$rmQMzZDghl/.sJyohBZ2B4Z4Bxkr.zOZJ5c4pVJlHTZEGbO28CoXhgPUZ/gds5km3puT9O2b.K0bIjbNeNTSW/:18277:0:99999:7:::

我想要的脚本输出:

例如

pi:$6$salty-boi$nt6OkKwSfV4kkk2mcEjEZW1z9rChDK9VeE.c7LE5oFv4Zd.KQbqlN2mSnc9EbcAB.iIlvhRCT10Y6ovLWvaLu.:18277:0:99999:7:::

我尝试过:

sed -i "s|pi:.*:|pi:$RPI_PASSWD_ENCRYPTED:|g" shadow

但是我得到的输出是这个:

pi:$6$saltypi$NpLE895oMWEr3R6p9f1dZnekSeJq8QdAk8tQu08rTF3gsnKVoKX7Z.JsNyBCg.o/QamYgzr.w7dVoRyi5nFBM.:

之后没有此内容:18277:0:99999:7:::

这是我的脚本示例:

#!/bin/bash
exitstatus=$?
RPI_PASSWD=$(whiptail --inputbox "Type a password for user pi. Press cancel to skip." 8 40 --title "Changing default password" --ok-button "Ok" --cancel-button "Cancel" 3>&1 1>&2 2>&3)
if [ $exitstatus = 0 ]; then
   RPI_PASSWD_ENCRYPTED=$(openssl passwd -6 -salt saltypi $RPI_PASSWD)
   sed -i "s|pi:.*:|pi:$RPI_PASSWD_ENCRYPTED:|g" shadow
fi
exit 1

Here's the full code.

bash encryption sed passwords shadow
1个回答
0
投票
"s|pi:[^:]*:|pi:$RPI_PASSWD_ENCRYPTED:|g"
© www.soinside.com 2019 - 2024. All rights reserved.