2017-09-13 70 views
0

有此文件:我如何正確展開變量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腳本改變與用戶名的哈希值。 例如更改用戶1哈希,我會用:

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 

如何糾正我的命令,以便爲L et it擴展hash變量是否正確?我嘗試了一些'"命令的組合,但沒有結果。任何幫助? 謝謝!

回答

4

由於您使用,作爲分隔符爲s命令應該是:

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

我也s命令後附加一個;sed的一些實現需要。

+1

謝謝!這很好用! –

+0

不客氣 – hek2mgl