如何在sed命令中正确扩展变量

时间:2017-09-13 13:54:07

标签: bash sed

我有这个文件:

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变量?我尝试了'"命令的某些组合但没有结果。有帮助吗? 谢谢!

1 个答案:

答案 0 :(得分:4)

由于您使用,作为s命令的分隔符,因此它应该是:

sed -i "/$1:/{n;s,.*,  hash: $hash,;}" "$users"
----------------------------------^ comma, not /

我还在;命令后添加了ssed的某些实现需要它。