我有这个文件:
user0:
hash: $2a$12$DA47ZutoC.89KDePyBK.yubz.2vfEiLi28ENBRuyoNf.px3.vHINq
user1:
hash: $2a$12$Auk82xqdbgFb4AJKyvSuWOKTQivuHhJZwckLii5/a5ILhCke0sddS
user3:
hash: $2a$12$QW/dCK7CqE5s87OIk8QBeeBYVvD5tjbd46jH9wVD9YMWW31KQEA1y
user4:
hash: $2a$12$60ds1ivJzM/DexIBYUilzO4BPjumsdTOETAHoopIxabffoWiDEkum
和bash脚本,用于更改与用户名关联的哈希值。 例如,要更改user1哈希,我会使用:
sed -i "/user1:/{n;s,.*, hash: NEW_HASH/}" MY_FILE
现在,在脚本中我有变量,所以实际上我之前的例子是:
sed -i "/$1:/{n;s,.*, hash: $hash/}" "$users"
我的问题是$hash
参数也有/
个字符,导致出现这样的sed错误:
sed: -e expression #1, char 85: unterminated `s' command
如何更正我的命令才能正确展开hash
变量?我尝试了'
和"
命令的某些组合但没有结果。有帮助吗?
谢谢!
答案 0 :(得分:4)
由于您使用,
作为s
命令的分隔符,因此它应该是:
sed -i "/$1:/{n;s,.*, hash: $hash,;}" "$users"
----------------------------------^ comma, not /
我还在;
命令后添加了s
。 sed
的某些实现需要它。