Страница 1 из 1

Помогите пожалуйста с sed'ом

Добавлено: 06 май 2012, 14:56
SolarW
Здравствуйте.

Пытаясь реализовать у себя вот этот мануал уперся в преобразование строк sed'ом.
В оригинале выражение

Код: Выделить всё

28.04.2012 04:30:29 - USSD - 000105: Баланс 393.08 р. iPhone в офисах Билайн от 16 590 р. Инф 068006
превращается в

Код: Выделить всё

28.04.2012 04:30:29;393.08;000105
командой вида

Код: Выделить всё

sed -E 's/( - |: Баланс | р.)/;/g' | sed 's/,/./g' | awk -F ";" '{print $1";"$4";"$3}'
Но у автора статьи Ubuntu а у меня CentOS (Elastix).
И в нем почему-то принципиально не работают параметры для sed'а содержащие двоеточия...

Отсюда вопрос: помогите подобрать параметры для sed'а чтобы в строке

Код: Выделить всё

05.05.2012 22:09:10 - USSD - dongle1: Na rahunku: 145.97 grn. Info pro bonusy na *112# i *119#. Nomer die do 04/05/13
заменить на точку с запятой следующие подстроки:
" - " - это получилось
" grn." - и это получилось
": Na rahunku: " - а вот это никак не могу осилить, выдает ошибку

Код: Выделить всё

sed: -e выражение #1, символ 11: неизвестный модификатор к `s'
Ну и набор параметров внутри круглых скобок задать не выходит - они там разъединены расширенным двоеточием а оно похоже как разделитель команд срабатывает...

Re: Помогите пожалуйста с sed'ом

Добавлено: 06 май 2012, 15:32
Vlad1983
не -E, а -e

Код: Выделить всё

echo "05.05.2012 22:09:10 - USSD - dongle1: Na rahunku: 145.97 grn. Info pro bonusy na *112# i *119#. Nomer die do 04/05/13" \
> | sed -e 's/: Na rahunku: /;/' |  sed -e 's/ - /;/g' | sed -e 's/ grn. /;/'
05.05.2012 22:09:10;USSD;dongle1;145.97;Info pro bonusy na *112# i *119#. Nomer die do 04/05/13
без параметров результат тот же

Код: Выделить всё

echo "05.05.2012 22:09:10 - USSD - dongle1: Na rahunku: 145.97 grn. Info pro bonusy na *112# i *119#. Nomer die do 04/05/13" > test
sed 's/: Na rahunku: /;/' test | sed 's/ - /;/g' | sed 's/ grn. /;/'
05.05.2012 22:09:10;USSD;dongle1;145.97;Info pro bonusy na *112# i *119#. Nomer die do 04/05/13
или -r

Код: Выделить всё

echo "05.05.2012 22:09:10 - USSD - dongle1: Na rahunku: 145.97 grn. Info pro bonusy na *112# i *119#. Nomer die do 04/05/13" > test
sed -r 's/(: Na rahunku: | - | grn. )/;/g' test
05.05.2012 22:09:10;USSD;dongle1;145.97;Info pro bonusy na *112# i *119#. Nomer die do 04/05/13

Re: Помогите пожалуйста с sed'ом

Добавлено: 06 май 2012, 17:05
SolarW
Огромнейшее спасибо.

Сравнил первый вариант с тем, что у меня не работало - увидел где неправильно пробелы поставил.

Ну и второй вариант тоже красивый - пробовал несколько аргументов задавать в круглых скобках но не знал что совместно с таким написанием надо -r использовать, прочел в хелпе что

Код: Выделить всё

  -r, --regexp-extended
                 использование в скрипте расширенных регулярных выражений.
и подумал что этот ключ к регэкспам типа "слово начинается с ..." или "слово содержит ..." относится.

Еще раз большое спасибо.

Re: Помогите пожалуйста с sed'ом

Добавлено: 06 май 2012, 17:53
Vlad1983

Код: Выделить всё

sed -r 's/: Na rahunku: | - | grn. /;/g' test
так тоже работает, т.е. круглые скобки лишние
метасимволы, используемые в регулярных выражениях, так же действуют

Re: Помогите пожалуйста с sed'ом

Добавлено: 07 май 2012, 01:16
SolarW
Спасибо за мануал, занес в закладки.

Скрипт все-таки странный - из командной строки работает нормально а из крона не отрабатываются sql-запросы с выборкой данных.
Те, которыми база заполняется работают а те, где выборка из базы и занесение результата в файл - нифига.
Уже всю голову поломал...

Re: Помогите пожалуйста с sed'ом

Добавлено: 07 май 2012, 08:13
SolarW
Это все я попробовал.
Перенаправление вывода скрипта в файл в задании крона стоит - ничего критичного в выводе нет.
Почту читал - там тоже самое что и в файле вывода.
Лог ошибок MYSQL-сервера включил - пусто (сейчас пишу и подозреваю что надо другого компонента логирование включить, клиента наверное)
Проверил чтобы переменная PATH была одинаковая как для юзера root так и для заданий cron'а.
Прописал команду mysql с полными путями (да и вообще все файлы с путями указал).
Результат все тот же - mysql-запрос который базу заполняет работает а который делает выборку из базы и заносит ее в текстовые файлики - нифига, в файлы ничего не записывается.
В проблеме я не одинок - гугл выдал топик на форуме с такой же проблемой
http://forum.sysadmins.su/index.php?showtopic=3516
но решения там нет.

Re: Помогите пожалуйста с sed'ом

Добавлено: 07 май 2012, 09:43
SolarW
Поскольку второй вопрос к sed'у отношения не имеет - создал по нему второй топик.
http://forum.asterisk.ru/viewtopic.php?f=11&t=1668