Sed изменить неизвестную строку в одной строке, оставив остальные нетронутыми - PullRequest
0 голосов
/ 05 мая 2020

У меня проблема с использованием sed в моем проекте. У меня есть файл myfile.txt с таким содержимым внутри:

{"Argument_date": "2020-04-16", "Argument_post": "true", "Argument_like": "false"}

Мне нужно изменить аргумент даты с фактической датой, не касающейся остальной части строки, но эта дата может быть любой, а не просто 2020-04-16 - значит, это неизвестная строка

Итак, я сделал это:

sed 's/\"Argument_date\"\: \".*\"/\"Argument_date\"\: \"'"$(date +%Y-%m-%d)"'\"/g' myfile.txt

Но я получаю почти правильный вывод:

{"Argument_date": "2020-05-05"}

Sed правильно меняет эту неизвестную дату на новую системную дату, но пропускает всю остальную строку. Может ли кто-нибудь объяснить мне, что я делаю неправильно, чтобы получить правильный результат, например:

{"Argument_date": "2020-05-05", "Argument_post": "true", "Argument_like": "false"}

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

Используйте jq для управления json:

jq --arg date "$(date +%Y-%m-%d)" '.Argument_date = $date'
1 голос
/ 05 мая 2020

Проблема с вашим регулярным выражением, оно соответствует всей строке, а затем заменяет ее на "Argument_date": "2020-05-05"

Попробуйте изменить свое регулярное выражение, чтобы оно соответствовало только необходимой части. Одно из возможных решений:

sed -E 's/(.*?)"Argument_date":\s+"[0-9]+-[0-9]+-[0-9]+"/\1"Argument_date":"'"$(date +%Y-%m-%d)"'"/g' file1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...