Использование стандартаsed
:
sed "s:^\([[:blank:]]*customerId = \)\"$OLDID\":\1\"$NEWID\":" file
Шаблон [:blank:]
будет соответствовать одному пробелу или символу табуляции.
Выражение sed
захватывает все в строке до самого идентификатора и заменяет его тем, что было захвачено, и новым идентификатором.
Чуть симпатичнее, возможно,
sed 's:^\([[:blank:]]*customerId = \)"'"$OLDID"'":\1"'"$NEWID"'":' file
Тестирование:
$ cat file
name="Jim"
customerId = "1234"
$ OLDID=1234
$ NEWID=321
$ sed 's:^\([[:blank:]]*customerId = \)"'"$OLDID"'":\1"'"$NEWID"'":' file
name="Jim"
customerId = "321"
Если пробелы вокруг =
необязательны, вы можете использовать
sed 's:^\([[:blank:]]*customerId *= *\)"'"$OLDID"'":\1"'"$NEWID"'":' file
Другой подход, предложенный Доном _Криссти в комментариях:
sed '/customerId *=/s/"'"$OLDID"'"/"'"$NEWID"'"/' file
Это имеет то преимущество, что ему не нужна группа захвата. Это ищет строки, содержащие слово customerId
, за которым следует знак равенства, и заменяет идентификаторы в этих строках.