ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

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

Общие вопросы по операционной системе

Модераторы: april22, Zavr2008

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

Сообщение SolarW » 06 май 2012, 14:56

Здравствуйте.

Пытаясь реализовать у себя вот этот мануал уперся в преобразование строк 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'

Ну и набор параметров внутри круглых скобок задать не выходит - они там разъединены расширенным двоеточием а оно похоже как разделитель команд срабатывает...
Аватар пользователя
SolarW
 
Сообщений: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

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

Сообщение Vlad1983 » 06 май 2012, 15:32

не -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
ЛС: @rostel
Vlad1983
 
Сообщений: 4251
Зарегистрирован: 09 авг 2011, 11:51

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

Сообщение SolarW » 06 май 2012, 17:05

Огромнейшее спасибо.

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

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

и подумал что этот ключ к регэкспам типа "слово начинается с ..." или "слово содержит ..." относится.

Еще раз большое спасибо.
Аватар пользователя
SolarW
 
Сообщений: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

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

Сообщение Vlad1983 » 06 май 2012, 17:53

Код: выделить все
sed -r 's/: Na rahunku: | - | grn. /;/g' test

так тоже работает, т.е. круглые скобки лишние
метасимволы, используемые в регулярных выражениях, так же действуют
ЛС: @rostel
Vlad1983
 
Сообщений: 4251
Зарегистрирован: 09 авг 2011, 11:51

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

Сообщение SolarW » 07 май 2012, 01:16

Спасибо за мануал, занес в закладки.

Скрипт все-таки странный - из командной строки работает нормально а из крона не отрабатываются sql-запросы с выборкой данных.
Те, которыми база заполняется работают а те, где выборка из базы и занесение результата в файл - нифига.
Уже всю голову поломал...
Аватар пользователя
SolarW
 
Сообщений: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

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

Сообщение SolarW » 07 май 2012, 08:13

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

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

Сообщение SolarW » 07 май 2012, 09:43

Поскольку второй вопрос к sed'у отношения не имеет - создал по нему второй топик.
viewtopic.php?f=11&t=1668
Аватар пользователя
SolarW
 
Сообщений: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина


Вернуться в Linux

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH