непонятки с sed и переменными

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

непонятки с sed и переменными

Непрочитанное сообщение schizoid » 2009-07-03 14:49:11

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

# new="Модулi пам'ятi";k="`echo $new | sed 's/[ \t]*$//'| sed "s/'/\\\'/"`"; echo "$k"
Модулi пам'ятi
# new="Модулi пам'ятi";echo $new | sed 's/[ \t]*$//'| sed "s/'/\\\'/"
Модулi пам\'ятi
в чем прикол?
ядерный взрыв...смертельно красиво...жаль, что не вечно...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Гость
проходил мимо

Re: непонятки с sed и переменными

Непрочитанное сообщение Гость » 2009-07-03 16:08:43

schizoid писал(а):

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

# new="Модулi пам'ятi";k="`echo $new | sed 's/[ \t]*$//'| sed "s/'/\\\'/"`"; echo "$k"
Мало! Ставь 5 (пять) бэкслэшев или используй $(...) вместо `...`.

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

$ echo `echo '\\'`
\
$ echo $(echo '\\')
\\

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: непонятки с sed и переменными

Непрочитанное сообщение schizoid » 2009-07-03 17:11:00

точняк. снкс
ядерный взрыв...смертельно красиво...жаль, что не вечно...

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: непонятки с sed и переменными

Непрочитанное сообщение schizoid » 2009-07-03 17:53:30

продолжу тут, что б не создавать новую тему

есть скрипт:

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

i=0
code=''
descr=''
cat descr.temp |

while read k1 k2;
do
i=`expr $i + 1`
  w="$k2"
  new="$(echo $w | sed 's/[ \t]*$//'| sed "s/'/\\\'/g")"
  chet=`expr $i % 2`
  # 0 - четное; 1 - нечетное
  if [ $chet -eq 1 ];
  then
   code=$new
  else
   descr=$new
   echo "insert into zakaz.sc33 (code,descr) value ('$code','$descr');" >> descr.sql
  fi
done
который из файла вида:

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

       CODE: 101
      DESCR: Мишка  А4-tech SWOP-3, blue, optical, PS/2
       CODE: 10015
      DESCR: ZIP Drive  100Mb NEC, int. IDE
       CODE: 1002
      DESCR: Принтери
       CODE: 10026
      DESCR: Картридж EPSON St Color 680 black(double)
       CODE: 10028
      DESCR: HDD RACK UWSCSI
       CODE: 1003
      DESCR: Пристрої безперебiйного живлення
формирует файл вида:

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

insert into zakaz.sc33 (code,descr) value ('101','Мишка А4-tech SWOP-3, blue, optical, PS/2');
insert into zakaz.sc33 (code,descr) value ('10015','ZIP Drive 100Mb NEC, int. IDE');
insert into zakaz.sc33 (code,descr) value ('1002','Принтери');
insert into zakaz.sc33 (code,descr) value ('10026','Картридж EPSON St Color 680 black(double)');
insert into zakaz.sc33 (code,descr) value ('10028','HDD RACK UWSCSI');
insert into zakaz.sc33 (code,descr) value ('1003','Пристрої безперебiйного живлення');
insert into zakaz.sc33 (code,descr) value ('1004','Факси');
insert into zakaz.sc33 (code,descr) value ('10049','HP Color LaserJet CM1015, A4, принтер/сканер/копир, 8/3 чб./цв., 600dpi, USB 2.0');
insert into zakaz.sc33 (code,descr) value ('1005','Телефони беспроводные Panasonic');
insert into zakaz.sc33 (code,descr) value ('1006','Копіри');
insert into zakaz.sc33 (code,descr) value ('1007','Корпуси');
insert into zakaz.sc33 (code,descr) value ('1008','Монiтори');
но т.к. в исходном файле порядка 175000 строк, этот скрипт отрабатывает очень долго. как можно его оптимизировать? или придется писать на другом языке программирования?
ядерный взрыв...смертельно красиво...жаль, что не вечно...

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: непонятки с sed и переменными

Непрочитанное сообщение zg » 2009-07-03 19:56:19

schizoid писал(а):как можно его оптимизировать?
гм... да чё тут оптимизировать то?! сделай замены седом

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

zg# ./1.sh
       INSERT INTO zakaz.sc33 set code='101',
      value='Мишка  А4-tech SWOP-3, blue, optical, PS/2';
       INSERT INTO zakaz.sc33 set code='10015',
      value='ZIP Drive  100Mb NEC, int. IDE';
       INSERT INTO zakaz.sc33 set code='1002',
      value='Принтери';
       INSERT INTO zakaz.sc33 set code='10026',
      value='Картридж EPSON St Color 680 black(double)';
       INSERT INTO zakaz.sc33 set code='10028',
      value='HDD RACK UWSCSI';
       INSERT INTO zakaz.sc33 set code='1003',
      value='Пристрої безперебiйного живлення';

zg# cat 1.sh
#!/bin/sh
sed -E \
  -e "s/CODE: (.*)/INSERT INTO zakaz.sc33 set code='\1',/" \
  -e "s/DESCR: (.*)/value='\1';/" \
    1.txt
zg# cat 1.txt
       CODE: 101
      DESCR: Мишка  А4-tech SWOP-3, blue, optical, PS/2
       CODE: 10015
      DESCR: ZIP Drive  100Mb NEC, int. IDE
       CODE: 1002
      DESCR: Принтери
       CODE: 10026
      DESCR: Картридж EPSON St Color 680 black(double)
       CODE: 10028
      DESCR: HDD RACK UWSCSI
       CODE: 1003
      DESCR: Пристрої безперебiйного живлення

zg#

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: непонятки с sed и переменными

Непрочитанное сообщение schizoid » 2009-07-03 23:23:04

да, так на много быстрее, но еще все таки нужно применить то, что я делал, обрезка пустого справа, и замена ' -> \' (иначе муксль не втягивает), и еще нуно в одну строку запрос (ну или перенос вставить), а то тоже мускль не хавает.
нуно про sed пойти почитать. рульная вещь
ядерный взрыв...смертельно красиво...жаль, что не вечно...

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: непонятки с sed и переменными

Непрочитанное сообщение zg » 2009-07-04 6:12:53

schizoid писал(а):еще нуно в одну строку запрос (ну или перенос вставить), а то тоже мускль не хавает.
гм... мускуль игнорирует пробелы, это пофигу

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

zg# cat | mysql mysql
                              select
user                                from
user
                  limit
                                                        1
;
user
root
zg#
с кавычками сложнее, но тут на самом деле не всё так страшно :smile: просто добавляешь ещё одно правило замены в начало комманд и всё.

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

zg# ./1.sh
       INSERT INTO test.sc33 set code='101',
      value='Мишка  \'А4-tech\' SWOP-3, blue, optical, PS/2';
       INSERT INTO test.sc33 set code='10015',
      value='ZIP Drive  100Mb NEC, int. IDE';
       INSERT INTO test.sc33 set code='1002',
      value='Принтери';
       INSERT INTO test.sc33 set code='10026',
      value='Картридж \'EPSON\' St Color 680 black(double)';
       INSERT INTO test.sc33 set code='10028',
      value='HDD RACK UWSCSI';
       INSERT INTO test.sc33 set code='1003',
      value='Пристрої безперебiйного живлення';

zg# ./1.sh | mysql test
zg# mysql -be 'select * from test.sc33;'
+-------+----------------------------------------------+
| code  | value                                        |
+-------+----------------------------------------------+
| 101   | Мишка  'А4-tech' SWOP-3, blue, optical, PS/2 |
| 10015 | ZIP Drive  100Mb NEC, int. IDE               |
| 1002  | Принтери                                     |
| 10026 | Картридж 'EPSON' St Color 680 black(double)  |
| 10028 | HDD RACK UWSCSI                              |
| 1003  | Пристрої безперебiйного живлення             |
+-------+----------------------------------------------+
zg# cat 1.sh
#!/bin/sh
sed -E \
  -e "s/'/\\\\'/g" \
  -e "s/CODE: (.*)/INSERT INTO test.sc33 set code='\1',/" \
  -e "s/DESCR: (.*)/value='\1';/" \
    1.txt
zg#

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: непонятки с sed и переменными

Непрочитанное сообщение schizoid » 2009-07-05 17:26:23

плин. клевота. завтра на работе попробую . сеньки :)
ядерный взрыв...смертельно красиво...жаль, что не вечно...

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: непонятки с sed и переменными

Непрочитанное сообщение schizoid » 2009-07-06 12:42:27

все гут. дец еще доработал и внедрил ;) :drinks:
ядерный взрыв...смертельно красиво...жаль, что не вечно...