Найти и заменить на sed и regex - PullRequest
0 голосов
/ 27 января 2019

Я хотел бы использовать sed для замены версии файлов ресурсов.

У меня есть это в файле:

<script src="<?php echo assetsUrl ?>/ic-1548620973.js"></script>

и я хочу обновить метку времени с помощью этой команды:

sed -i "s/(?<=ic-)(.*)(?=.js)/$timestamp.js/" src/views/partials/foot.view.php

Сообщение об ошибке:

sed: 1: "src/views/partials/foot ...": unterminated substitute in regular expression

Ответы [ 3 ]

0 голосов
/ 27 января 2019

sed на macOS не собирается делать такие вещи, как его аналог на Linux, поэтому вам нужно его настроить.

$ timestamp=$( date +%s )
$ sed -Ei '' 's@(ic-)(.*)(\.js)@\1'"$timestamp"'\3@g' src/views/partials/foot.view.php 

Вам нужно будет включитьопция -E, потому что вы используете группы захвата, и не нужно обращать внимание на тот факт, что sed не является подходящим инструментом для этого.Что касается редактирования на месте на macOS, вам нужно включить две одинарные кавычки '' после опции -i, чтобы сохранить ее в исходном файле (на месте).

Iизменил разделители с / на @ для удобства чтения.По сути, у вас есть три группы захвата, вы будете включать только первую и третью группы, предоставляя переменную $timestamp между ними.

Выход :

<script src="<?php echo assetsUrl ?>/ic-1548622266.js"></script>
0 голосов
/ 28 января 2019

Учитывая, что у вас установлено ruby:

ruby -i -ne 'puts $_.gsub(/(?<=ic-)\d+(?=\.js)/,Time.now.to_i.to_s)' src/views/partials/foot.view.php

Я не уверен, но кажется ruby было предустановлено в MacOS, верно?

0 голосов
/ 27 января 2019

Попробуйте это:

sed -i 's/(?<=ic-)(.*)(?=.js)/'"$timestamp.js"'/' src/views/partials/foot.view.php
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...