используя sed для замены подстановочными знаками - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь заменить этот текст (независимо от хххх):

{"type":"record","name":"xxxx","namespace":"example","fields":[{"name":"name","type":"string"}, {"name":"favorite_color","type":["string","null"]}]}

с этим:

{"type":"record","name":"yyyy","namespace":"example","fields":[{"name":"name","type":"string"},{"name":"favorite_color","type":["string","null"]}]}

Я использую sed, но с этой командой:

sed 's/\"name\"\:\".*\"/\"name\"\:\"yyyy\"/' file.json

Я получаю:

{"type":"record", "name":"yyyy"]}]}

потому что он заменяет весь контент до последней двойной кавычки.

Как можно использовать символы подстановки для замены только текста до следующей двойной кавычки?

1 Ответ

0 голосов
/ 24 апреля 2018

Вы можете попробовать это:

sed 's/\"name\":\"[^\"]*\"/\"name\":\"yyyy\"/' file.json

Следовательно, измените обычный шаблон так, чтобы он выглядел до следующих двойных кавычек вместо любого символа.

Если вы хотите записать изменения в файл, вам понадобится флаг -i, в дополнение к -r, чтобы использовать регулярные выражения. И если вы хотите, чтобы это применялось к нескольким вхождениям, вы можете добавить g к команде sed:

sed -i -r 's/\"name\":\"[^\"]*\"/\"name\":\"yyyy\"/g' file.json

Обновление : не требуется экранировать двойные кавычки ... Команда может быть такой:

sed -i -r 's/"name":"[^"]*"/"name":"yyyy"/g' file.json
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...