Apache и mysqlamin показывают пустые данные

Использование стандарта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, за которым следует знак равенства, и заменяет идентификаторы в этих строках.

0
28.01.2020, 04:45
0 ответов

Теги

Похожие вопросы