Sed заменяет last_updated: "1494099933" на last_updated: "1539339683412" (время эпохи, посредством подстановки команд и двойных кавычек) - PullRequest
0 голосов
/ 12 октября 2018

Я получаю время эпохи с помощью этой команды: node -e 'console.log(Date.now())'

, которая (на момент написания) дала мне 1539339683412.

В yml-файле много файловкоторый я хочу изменить datetime 1494099933 на 1539339683412.

В настоящее время моя команда sed (в Mac OS X), чтобы сделать это для 1 файла:

sed -i .bak "s/last_updated.*\".*\"/last_updated: $(node -e 'console.log(Date.now())')/g" ingress.yml

Это заменяет его на:

last_updated: 1539339683412

Проблема в том, что двойные кавычки отсутствуют, и для изучения sed я хочу заменить его на:

last_updated:"1539339683412"

Как мне это сделать?

Я попытался добавить экранированные кавычки, такие как \", например: sed -i .bak "s/last_updated.*\".*\"/last_updated: \"$(node -e 'console.log(Date.now())')/g\"" ingress.yml

Это выдает ошибку: sed: 1: "s/last_updated.*".*"/la ...": bad flag in substitute command: '"'

Я также пытался: sed -i .bak 's/last_updated.*\".*\"/last_updated: "$(node -e "console.log(Date.now())")"/g' ingress4.yml.

Что привело к: last_updated: "$(node -e "console.log(Date.now())")"

1 Ответ

0 голосов
/ 12 октября 2018

Заключительная кавычка идет перед окончательной /.

sed -i .bak "s/last_updated.*\".*\"/last_updated: \"$(node -e 'console.log(Date.now())')\"/g" ingress.yml

Уведомление ...Date.now())'\"/g" pro ...Date.now())'/\"g"

Строка подстановки - это содержимое между двумя последними косыми чертами (илив более общем случае символы-разделители; для этого не нужно использовать косую черту).Все, что находится после последнего разделителя, является опцией для команды подстановки s/// (например, g для глобальной замены; это, кстати, здесь излишне, если вы не ожидаете более одного совпадения на строку).

...