Usando o padrão sed
:
sed "s:^\([[:blank:]]*customerId = \)\"$OLDID\":\"$NEWID\":" file
O padrão [:blank:]
corresponderá a um único espaço ou caractere de tabulação.
A expressão sed
captura tudo na linha até a própria ID e a substitui pelo que foi capturado e pela nova ID.
Um pouco mais bonito, possivelmente,
sed 's:^\([[:blank:]]*customerId = \)"'"$OLDID"'":"'"$NEWID"'":' file
Teste:
$ cat file
name="Jim"
customerId = "1234"
$ OLDID=1234
$ NEWID=321
$ sed 's:^\([[:blank:]]*customerId = \)"'"$OLDID"'":"'"$NEWID"'":' file
name="Jim"
customerId = "321"
Se os espaços em torno do =
forem opcionais, talvez você queira usar
sed 's:^\([[:blank:]]*customerId *= *\)"'"$OLDID"'":"'"$NEWID"'":' file
Outra abordagem sugerida por don_crissti nos comentários:
sed '/customerId *=/s/"'"$OLDID"'"/"'"$NEWID"'"/' file
Isso tem o benefício de não precisar de um grupo de captura. Isso procura linhas contendo a palavra customerId
seguida por um sinal de igual e substitui as IDs nessas linhas.