Как искать и заменять строку, используя sed - PullRequest
0 голосов
/ 24 сентября 2011

У меня есть такой файл

выберите b.id в качестве cli_id, b.login в качестве cli_login, b.pname в качестве cli_name, b.cname как cli_company, b.phone как cli_phone, b.email как cli_email, (выберите (значение / 1048576) из Пределов, где limit_name = 'disk_space' и id = b.limits_id) как Client_Package, b.cr_date, (выберите FROM_UNIXTIME (значение, "% Y-% m-% d") из пределов, где limit_name = 'expiration' и id = b.limits_id) как Client_expire, Если (b.status = 0, «Active», «Inactive») как Cli_Status, a.name как dom_name, Если (a.status = 0, 'Active', 'Inactive') как Dom_Package, a.cr_date как dom_create, (выберите FROM_UNIXTIME (значение, "% Y-% m-% d") из пределов, где limit_name = 'expiration' и id = a.limits_id) как dom_expire, (выберите (значение / 1048576) из пределов, где limit_name = 'disk_space' и id = a.limits_id) как Dom_Package, round ((a.real_size / 1048576)) как Dom_usage из доменов a, клиенты b, где (выберите FROM_UNIXTIME (значение, "% Y-% m-% d") из пределов, где limit_name = 'expiration' и id = a.limits_id и (FROM_UNIXTIME (значение, «% Y-% m-% d») между «2011-08-01» и '2011-12-01')) и a.cl_id = b.id группа по a.id;

все это входит в одну строку

тем, что я хочу заменить только часть даты в этом формате

между «2011-08-01» и «2011-12-01»

Сценарий запускается каждую пятницу, предположим, если я запускаю его на 10-м месяце, значит.

скрипт должен изменить значение в файле следующим образом

между «2011-09-01» и «2012-01-01»

каждый раз, когда нужно изменить только месяц, в этом формате

между «текущий месяц -1 месяц» и «текущий месяц + 3 месяца»

sed -i 's/between  '2011-08-01' and '2011-12-01'/'between '$(date --date="- 1 month" +%Y-%m)-01' and '$(date --date="+ 3 months" +%Y-%m)-01'/g file1

в этом коде я пытаюсь найти и заменить

но это показывает эту ошибку

sed: -e выражение # 1, символ 44: неопределенная команда `s '

Какую ошибку я могу объяснить? 1 1038 *

1 Ответ

1 голос
/ 24 сентября 2011

Выражение не указано правильно.Вы начинаете с 's / ... но заканчиваете ... / g.Там нет цитаты.Это то, что я бежал, и он работал нормально:

sed -i "s/between '[0-9-]*' and '[0-9-]*'/between '$(date --date'-1month' +%Y-%m-01)' and '$(date --date'+3months' +%Y-%m-01)'/g" file1
...