Сед, чтобы добавить кавычки вокруг отметок времени - PullRequest
0 голосов
/ 26 октября 2018

У меня большой файл, который содержит временные метки в следующем формате:

2018-08-22T13:06:04.442774Z

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

sed -e s/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}T[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}.[0-9]\{6\}Z/"$0"/g my_file.json

, и я почти уверен, что проблема связана с моим выражением «замена».

Как мне исправить команду?

Заранее спасибо.

Ответы [ 2 ]

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

Следующие работы:

sed 's/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}T[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\.[0-9]\{6\}Z\)/"\1"/g' my_file.json

несколько модификаций:

  • обернуть команду в одинарные кавычки
  • использовать \( и \) для созданиягруппа (на которую ссылается '\ 1` в разделе замены)
  • экранировать'. 'и символы '{' и '}'
0 голосов
/ 26 октября 2018

Вы должны обернуть команду замены sed одинарными кавычками и использовать & вместо $0 в RHS для замены на все совпадение:

sed 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}T[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\.[0-9]\{6\}Z/"&"/g' file > outfile

См. онлайн демо

Кроме того, не забудьте экранировать символ ., если хотите найти точку, а не какой-либо символ.

Вы также можете удалить избыточные экранированные символы, если используете синтаксис ERE:

sed -E 's/[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]{6}Z/"&"/g'

Если вы хотите изменить встроенный файл , используйте параметр -i,

sed -i 's/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}T[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\.[0-9]\{6\}Z/"&"/g' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...