Re: помогите с sed и подпрограммой
On 24.06.2013 21:27, Артём Н. wrote: если вдруг кому понадобиться в будущем: sed -i -r '/^.*::.*/s/(^.*)(::) (.*)/echo -n \\1;echo -n : ; echo \\3 | base64 -d/e' /path/to/file Угу. *) Спасибо. :: ) Пожелаю вам, чтобы ваш код поддерживал хороший саппорт: http://tinyurl.com/mmmdg2v И скорейшего перехода на Ruby или Perl. /( Все познается в процессе сравнения ) Не ошибается тот, кто ни чего не делает. Да на перле проще в каком то смысле - но ведь до этого нужно было дойти. -- С Уважением, специалист по техническому и программному обеспечению, системный администратор Скубриев Владимир ~~~ Россия, Ростовская область, г. Таганрог тел. моб: +7 (918) 504 38 20 skype: v.skubriev icq: 214-800-502 www: skubriev.ru
Re: помогите с sed и подпрограммой
On 25.06.2013 11:35, Владимир Скубриев wrote: Все познается в процессе сравнения ) Не ошибается тот, кто ни чего не делает. Ну да. Да на перле проще в каком то смысле - но ведь до этого нужно было дойти. Простота написания - не самоцель. Просто если через год, вам потребуется прочитать то, что вы написали, есть вероятность, что несколько десятков волшебных строчек на sed, как в примере, заставит вас забыть поговорки. Кстати, особенно увлекательно будет копаться в старой рассылке, чтобы понять, как это работало и почему. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/51c9cec4.5070...@yandex.ru
Re: помогите с sed и подпрограммой
On 20.06.2013 15:49, Владимир Скубриев wrote: On 20.06.2013 10:50, Владимир Скубриев wrote: не рабочий вариант: sed -i -r '/^.*::.*/s/(^.*:: )(.*)/echo -n \1; echo \2 | base64 -d/e' $dbdir/$stamp/$ou рабочий вариант: sed -i -r '/^.*::.*/s/(^.*:: )(.*)/echo -n \\1; echo \\2 | base64 -d/e' $dbdir/$stamp/$ou пришлось за бэкслэшить \\1 и \\2 иначе bash переводил echo -n \\1; echo \\2 в echo -n ^A; echo ^2 пришлось не много переделать из-за того, что в ldap нельзя загрузить ldif с разделителем :: поэтому окончательный вариант для chef'a если вдруг кому понадобиться в будущем: sed -i -r '/^.*::.*/s/(^.*)(::) (.*)/echo -n \\1;echo -n : ; echo \\3 | base64 -d/e' /path/to/file Угу. *) Спасибо. :: ) Пожелаю вам, чтобы ваш код поддерживал хороший саппорт: http://tinyurl.com/mmmdg2v И скорейшего перехода на Ruby или Perl. /( -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/51c88170.4020...@yandex.ru
Re: помогите с sed и подпрограммой
On 19.06.2013 22:13, Alexander Galanin wrote: On Wed, 19 Jun 2013 15:29:16 +0400 dimas dimas...@ya.ru wrote: если в качестве разделителя вместо / выбрать что-то, чего заведомо не будет в замеяемой строке, то может и прокатить))) но это костыль. а как нормально заэкранировать ввод? гугль подсказал про printf %q, но он съедает не все - например, / . остаются как есть, хотя во второй части команды это не страшно. да в принципе, можно много фигни там написать, и она пойдет как есть, это в строке поиска надо мудрить. Пропустить через что-нибудь типа sed 's/[\/abc]/\\/g', чтобы заэкранировать спецсимволы (набор которых в каждом случае свой, в моём примере это /, a, b и c). А лучше использовать язык более широкого применения, в котором такие пляски не понядобятся, потому что через год понять эту белиберду на регекспах будет сложно. По поводу плясок согласен. Уж очень много нюансов. Сейчас вот из шефа не работает - скотина. Уже просто слов нет. 2-ой день пошел. -- С Уважением, специалист по техническому и программному обеспечению, системный администратор Скубриев Владимир ~~~ Россия, Ростовская область, г. Таганрог тел. моб: +7 (918) 504 38 20 skype: v.skubriev icq: 214-800-502 www: skubriev.ru -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/51c2a10d.5080...@skubriev.ru
Re: помогите с sed и подпрограммой
On 20.06.2013 10:28, Владимир Скубриев wrote: По поводу плясок согласен. Уж очень много нюансов. Сейчас вот из шефа не работает - скотина. Уже просто слов нет. 2-ой день пошел. не рабочий вариант: sed -i -r '/^.*::.*/s/(^.*:: )(.*)/echo -n \1; echo \2 | base64 -d/e' $dbdir/$stamp/$ou рабочий вариант: sed -i -r '/^.*::.*/s/(^.*:: )(.*)/echo -n \\1; echo \\2 | base64 -d/e' $dbdir/$stamp/$ou пришлось за бэкслэшить \\1 и \\2 иначе bash переводил echo -n \\1; echo \\2 в echo -n ^A; echo ^2 ) даже и не знаю что сказать - сложная это штука linux ) -- С Уважением, специалист по техническому и программному обеспечению, системный администратор Скубриев Владимир ~~~ Россия, Ростовская область, г. Таганрог тел. моб: +7 (918) 504 38 20 skype: v.skubriev icq: 214-800-502 www: skubriev.ru
Re: помогите с sed и подпрограммой
At Thu, 20 Jun 2013 10:50:45 +0400, Владимир Скубриев wrote: пришлось за бэкслэшить \\1 и \\2 иначе bash переводил echo -n \\1; echo \\2 в echo -n ^A; echo ^2 Ну разумеется. bash(1): \nnn the eight-bit character whose value is the octal value nnn (one to three digits) -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/87sj0dmbra.wl%free...@gmail.com
Re: помогите с sed и подпрограммой
12:21:24 171 ~$ echo test me baby | sed -r 's/(test me) (baby)/echo -n \2 ; echo \1/e' baby test me 12:24:18 171 ~$ echo test me baby | sed -r 's/(test me) (baby)/echo -n \\2 \; echo \\1\/e' baby test me 12:26:10 171 ~$ echo test me baby | sed -r 's/(test me) (baby)/echo -n \2 ; echo \1/e' baby test me УМВР во всех случаях. 2013-171 10:50 Владимир Скубриев vladi...@skubriev.ru wrote: On 20.06.2013 10:28, Владимир Скубриев wrote: По поводу плясок согласен. Уж очень много нюансов. Сейчас вот из шефа не работает - скотина. Уже просто слов нет. 2-ой день пошел. не рабочий вариант: sed -i -r '/^.*::.*/s/(^.*:: )(.*)/echo -n \1; echo \2 | base64 -d/e' $dbdir/$stamp/$ou рабочий вариант: sed -i -r '/^.*::.*/s/(^.*:: )(.*)/echo -n \\1; echo \\2 | base64 -d/e' $dbdir/$stamp/$ou пришлось за бэкслэшить \\1 и \\2 иначе bash переводил echo -n \\1; echo \\2 в echo -n ^A; echo ^2 ) даже и не знаю что сказать - сложная это штука linux ) -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20130620122848.7a64b...@ulf.tvoe.tv
Re: помогите с sed и подпрограммой
Владимир Скубриев - debian-russian@lists.debian.org @ Thu, 20 Jun 2013 10:50:45 +0400: По поводу плясок согласен. Уж очень много нюансов. Сейчас вот из шефа не работает - скотина. Уже просто слов нет. 2-ой день пошел. ВС не рабочий вариант: ВС sed -i -r '/^.*::.*/s/(^.*:: )(.*)/echo -n \1; echo \2 | base64 -d/e' ВС $dbdir/$stamp/$ou ВС рабочий вариант: ВС sed -i -r '/^.*::.*/s/(^.*:: )(.*)/echo -n \\1; echo \\2 | base64 -d/e' ВС $dbdir/$stamp/$ou ВС пришлось за бэкслэшить \\1 и \\2 иначе bash переводил echo -n \\1; echo \\2 ВС в echo -n ^A; echo ^2 ВС ) ВС даже и не знаю что сказать - сложная это штука linux ) Что-то я подозреваю, что не в баше дело. Если команда выдавалась в нем, то для bash экранирование апострофами - это повод не подставлять \n, и они должны были попасть к sed как есть, а дальше их подставит уже sed, и во внутренний bash они уже не попадут. Но если вся команда целиком подсовывалась башу какой-то еще программой, там могла произойти подстановка. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/8738sd86ob@wizzle.ran.pp.ru
Re: помогите с sed и подпрограммой
On 20.06.2013 13:36, Artem Chuprina wrote: Но если вся команда целиком подсовывалась башу какой-то еще программой, там могла произойти подстановка. как раз так и работает chef -- С Уважением, специалист по техническому и программному обеспечению, системный администратор Скубриев Владимир ~~~ Россия, Ростовская область, г. Таганрог тел. моб: +7 (918) 504 38 20 skype: v.skubriev icq: 214-800-502 www: skubriev.ru -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/51c2cf99.5010...@skubriev.ru
Re: помогите с sed и подпрограммой
On 20.06.2013 13:36, Artem Chuprina wrote: Но если вся команда целиком подсовывалась башу какой-то еще программой, там могла произойти подстановка. в просто созданном скрипте с #!/bin/bash все работает без экранирования дополнительным слэшем ) -- С Уважением, специалист по техническому и программному обеспечению, системный администратор Скубриев Владимир ~~~ Россия, Ростовская область, г. Таганрог тел. моб: +7 (918) 504 38 20 skype: v.skubriev icq: 214-800-502 www: skubriev.ru
Re: помогите с sed и подпрограммой
On 20.06.2013 10:50, Владимир Скубриев wrote: не рабочий вариант: sed -i -r '/^.*::.*/s/(^.*:: )(.*)/echo -n \1; echo \2 | base64 -d/e' $dbdir/$stamp/$ou рабочий вариант: sed -i -r '/^.*::.*/s/(^.*:: )(.*)/echo -n \\1; echo \\2 | base64 -d/e' $dbdir/$stamp/$ou пришлось за бэкслэшить \\1 и \\2 иначе bash переводил echo -n \\1; echo \\2 в echo -n ^A; echo ^2 пришлось не много переделать из-за того, что в ldap нельзя загрузить ldif с разделителем :: поэтому окончательный вариант для chef'a если вдруг кому понадобиться в будущем: sed -i -r '/^.*::.*/s/(^.*)(::) (.*)/echo -n \\1;echo -n : ; echo \\3 | base64 -d/e' /path/to/file -- С Уважением, специалист по техническому и программному обеспечению, системный администратор Скубриев Владимир ~~~ Россия, Ростовская область, г. Таганрог тел. моб: +7 (918) 504 38 20 skype: v.skubriev icq: 214-800-502 www: skubriev.ru
Re: помогите с sed и подпрограммой
Владимир Скубриев - debian-russian@lists.debian.org @ Tue, 18 Jun 2013 22:29:47 +0400: sed, помнится, делать так не умеет. Стоит взять perl. ВС да как бы перла еще не хватало ) ВС видел я примеры на нем, но хотелось бы все таки без всяких там perl, ruby, ВС python, etc Мы по debian или про LFS? У нас перл в базовую систему входит. В отличие от ruby, python, etc. И придуман ровно для решения задач, которые на sed/awk решать уже неудобно. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/87wqpqr36w@wizzle.ran.pp.ru
Re: помогите с sed и подпрограммой
On 19.06.2013 11:04, Artem Chuprina wrote: Владимир Скубриев - debian-russian@lists.debian.org @ Tue, 18 Jun 2013 22:29:47 +0400: sed, помнится, делать так не умеет. Стоит взять perl. ВС да как бы перла еще не хватало ) ВС видел я примеры на нем, но хотелось бы все таки без всяких там perl, ruby, ВС python, etc Мы по debian или про LFS? У нас перл в базовую систему входит. В отличие от ruby, python, etc. И придуман ровно для решения задач, которые на sed/awk решать уже неудобно. уже читаю ruby потому, что он мне важнее чем perl так как используется chef. а так по сути я уже понял что или perl | ruby но так ведь до этого надо было дойти ) -- С Уважением, специалист по техническому и программному обеспечению, системный администратор Скубриев Владимир ~~~ Россия, Ростовская область, г. Таганрог тел. моб: +7 (918) 504 38 20 skype: v.skubriev icq: 214-800-502 www: skubriev.ru -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/51c15ad7.9070...@skubriev.ru
Re: помогите с sed и подпрограммой
On Wed, Jun 19, 2013 at 09:23:43AM +0400, Владимир Скубриев wrote: Вот кусок исходного файла: # anthropics, users, example.lab dn: cn=anthropics,ou=users,dc=example,dc=lab cn: Anthropics Client cn: anthropics description: Anthropics Client gidNumber: 1901 homeDirectory: /home/anthropics loginShell: /bin/bash mail: [1]anthrop...@example.com objectClass: simpleSecurityObject objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount sn: Anthropics uid: anthropics uidNumber: 2019 userPassword:: e1NIQX1vTzU2WHBYMlU3cmZFWkJpL3I4UGUvYjNyb0k9 # apotash01, users, example.lab dn: cn=apotash01,ou=users,dc=example,dc=lab cn: Adam Potash cn: apotash01 description: Passenger monitoring project gidNumber: 1901 homeDirectory: /home/apotash01 loginShell: /bin/bash mail: [2]apotas...@example.com objectClass: simpleSecurityObject objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount sn: Potash uid: apotash01 uidNumber: 2032 userPassword:: e1NIQX1rVGkyNVBYd3FOZlNURXZkT1d3Q1FPZGZ5OVk9 $ sed -r 's/(userPassword:: )(.*)/echo -n \1; echo \2 | base64 -d/e' file # anthropics, users, example.lab dn: cn=anthropics,ou=users,dc=example,dc=lab cn: Anthropics Client cn: anthropics description: Anthropics Client gidNumber: 1901 homeDirectory: /home/anthropics loginShell: /bin/bash mail: anthrop...@example.com objectClass: simpleSecurityObject objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount sn: Anthropics uid: anthropics uidNumber: 2019 userPassword:: {SHA}oO56XpX2U7rfEZBi/r8Pe/b3roI= # apotash01, users, example.lab dn: cn=apotash01,ou=users,dc=example,dc=lab cn: Adam Potash cn: apotash01 description: Passenger monitoring project gidNumber: 1901 homeDirectory: /home/apotash01 loginShell: /bin/bash mail: apotas...@example.com objectClass: simpleSecurityObject objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount sn: Potash uid: apotash01 uidNumber: 2032 userPassword:: {SHA}kTi25PXwqNfSTEvdOWwCQOdfy9Y= -- wbr, alexander barakin aka sash-kan. -- i will be very thankful to you if you will use natural for the human order: first question, then the answer. signature.asc Description: Digital signature
Re: помогите с sed и подпрограммой
On 19.06.2013 12:56, alexander barakin wrote: $ sed -r 's/(userPassword:: )(.*)/echo -n \1; echo \2 | base64 -d/e' file Спасибо большое за такую подсказку. Это как раз то что я искал. Ваша команда работает, правда мне почему то захотелось её переписать вот так sed -i '/^userPassword/s/\(^userPassword:: \)\(.*\)/echo -n \1; echo \2 | base64 -d/e' /tmp/passwd Спору нет у вас красивей, но пока я не запомнил -r флаг, хотя он мне и встречался. Может скажите доброе слово в защиту -r ? Еще более чем странно, что я потратил уже целый рабочий день на то, чтобы заменить подстроку в файле. Прямо как то стрёмно становиться с прогнозами. Есть несколько вопросов: 1. если вызывать sed без -r, то нужно только экранировать Символы ‘?’, ‘+’, круглые скобки, {} символом \ если вы хотите использовать их как специальные символы и все ? в этом и есть его специальное предназначение - улучшать вид рэгэкспа ? 2. Не могу найти ссылку на документацию по использованию /e Для чего конкретно он используется почти в самом конце - не execute ли случайно ? 3. Где можно почитать по ; как разделителе команд оболочки в sed не подскажите ? Или это относиться к shell ) ? Остальное все понятно вроде. А я уже почте сделал на ruby ). Но пока не сделал еще где то ошибка есть. -- С Уважением, специалист по техническому и программному обеспечению, системный администратор Скубриев Владимир ~~~ Россия, Ростовская область, г. Таганрог тел. моб: +7 (918) 504 38 20 skype: v.skubriev icq: 214-800-502 www: skubriev.ru * English - detected * English * English javascript:void(0);
Re: помогите с sed и подпрограммой
s/^userPassword:\ // что означает обратный слэш после s/^userPassword: экранирование пробела. в принципе, без него работает, добавлять по вкусу)) -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20130619151159.3334f...@ulf.tvoe.tv
Re: помогите с sed и подпрограммой
если в качестве разделителя вместо / выбрать что-то, чего заведомо не будет в замеяемой строке, то может и прокатить))) но это костыль. а как нормально заэкранировать ввод? гугль подсказал про printf %q, но он съедает не все - например, / . остаются как есть, хотя во второй части команды это не страшно. да в принципе, можно много фигни там написать, и она пойдет как есть, это в строке поиска надо мудрить. 2013-170 09:12 Alexander Galanin a...@galanin.nnov.ru wrote: Это не сработает, например, со строкой YmxhaC9ibGFoCg==, переданной на вход base64 -d. А всё потому, что спецсимволы стоит экранировать. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20130619152916.51f00...@ulf.tvoe.tv
Re: помогите с sed и подпрограммой
On Wed, Jun 19, 2013 at 02:24:42PM +0400, Владимир Скубриев wrote: Есть несколько вопросов: 1. если вызывать sed без -r, то нужно только экранировать Символы ‘?’, ‘+’, круглые скобки, {} символом \ если вы хотите использовать их как специальные символы и все ? в этом и есть его специальное предназначение - улучшать вид рэгэкспа ? про параметр -r: $ info sed invoking sed и дальше по ссылке: $ info sed extended regexps 2. Не могу найти ссылку на документацию по использованию /e $ info sed the s command 3. Где можно почитать по ; как разделителе команд оболочки в sed не подскажите ? вероятно, где-то должно быть упомянуто, но сходу не нашёл. но есть примеры программ, где можно рассмотреть синтаксис разделения команд в sed-программах — точка с запятой или новая строка: $ info sed examples Или это относиться к shell ) ? в данном случае это относится к shell -- wbr, alexander barakin aka sash-kan. -- i will be very thankful to you if you will use natural for the human order: first question, then the answer. signature.asc Description: Digital signature
Re: помогите с sed и подпрограммой
On 19.06.2013 15:37, alexander barakin wrote: Можно еще маленький вопросик. Решил переписать для большей универсальности - работает: sed -i '/^.*::.*/s/\(^.*:: \)\(.*\)/echo -n \1; echo \2 | base64 -d/e' /tmp/passwd Далее решил потренироваться и переписать с -r Но вот не задача - ругается не могу понять в чем причина Вариант 1. Практически копия верхней команды только без символов экранирования с -r уже не пашет sed -ir '/^.*::.*/s/(^.*:: )(.*)/echo -n \1; echo \2 | base64 -d/e' /tmp/passwd Ругаеться на sed: -e expression #1, char 59: invalid reference \2 on `s' command's RHS Вариант 2. Версия вашего предложения без хардкодинга userPassword sed -ir 's/(.*:: )(.*)/echo -n \1; echo \2 | base64 -d/e' /tmp/passwd Ругаеться на sed: -e expression #1, char 49: invalid reference \2 on `s' command's RHS Что тут не так не знаете ? -- С Уважением, специалист по техническому и программному обеспечению, системный администратор Скубриев Владимир ~~~ Россия, Ростовская область, г. Таганрог тел. моб: +7 (918) 504 38 20 skype: v.skubriev icq: 214-800-502 www: skubriev.ru
Re: помогите с sed и подпрограммой
On Wed, Jun 19, 2013 at 04:58:07PM +0400, Владимир Скубриев wrote: On 19.06.2013 15:37, alexander barakin wrote: Можно еще маленький вопросик. Решил переписать для большей универсальности - работает: sed -i '/^.*::.*/s/\(^.*:: \)\(.*\)/echo -n \1; echo \2 | base64 -d/e' /tmp /passwd Далее решил потренироваться и переписать с -r Но вот не задача - ругается не могу понять в чем причина Вариант 1. Практически копия верхней команды только без символов экранирования с -r уже не пашет sed -ir '/^.*::.*/s/(^.*:: )(.*)/echo -n \1; echo \2 | base64 -d/e' /tmp/ passwd Ругаеться на sed: -e expression #1, char 59: invalid reference \2 on `s' command's RHS Вариант 2. Версия вашего предложения без хардкодинга userPassword sed -ir 's/(.*:: )(.*)/echo -n \1; echo \2 | base64 -d/e' /tmp/passwd Ругаеться на sed: -e expression #1, char 49: invalid reference \2 on `s' command's RHS Что тут не так не знаете ? опция -i подразумевает наличие необязательного параметра: -i[SUFFIX] не соединяйте её с другими опциями. т.е.: sed -i -r ... -- wbr, alexander barakin aka sash-kan. -- i will be very thankful to you if you will use natural for the human order: first question, then the answer. signature.asc Description: Digital signature
Re: помогите с sed и подпрограммой
Владимир Скубриев - debian-russian@lists.debian.org @ Wed, 19 Jun 2013 16:58:07 +0400: ВС On 19.06.2013 15:37, alexander barakin wrote: ВС Можно еще маленький вопросик. Решил переписать для большей универсальности - ВС работает: ВС sed -i '/^.*::.*/s/\(^.*:: \)\(.*\)/echo -n \1; echo \2 | base64 -d/e' ВС /tmp/passwd ВС Далее решил потренироваться и переписать с -r ВС Но вот не задача - ругается не могу понять в чем причина ВС Вариант 1. Практически копия верхней команды только без символов экранирования ВС с -r уже не пашет ВС sed -ir '/^.*::.*/s/(^.*:: )(.*)/echo -n \1; echo \2 | base64 -d/e' ВС /tmp/passwd ВС Ругаеться на ВС sed: -e expression #1, char 59: invalid reference \2 on `s' command's RHS В том варианте, с которого вы копируете, написано \( и \). А у вас - просто ( и ). Это не группирующие скобки, это просто символы скобок. На что sed, в общем, справедливо замечает, что \2 в таком раскладе взяться неоткуда. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/87ehby871b@wizzle.ran.pp.ru
Re: помогите с sed и подпрограммой
On Wed, 19 Jun 2013 15:29:16 +0400 dimas dimas...@ya.ru wrote: если в качестве разделителя вместо / выбрать что-то, чего заведомо не будет в замеяемой строке, то может и прокатить))) но это костыль. а как нормально заэкранировать ввод? гугль подсказал про printf %q, но он съедает не все - например, / . остаются как есть, хотя во второй части команды это не страшно. да в принципе, можно много фигни там написать, и она пойдет как есть, это в строке поиска надо мудрить. Пропустить через что-нибудь типа sed 's/[\/abc]/\\/g', чтобы заэкранировать спецсимволы (набор которых в каждом случае свой, в моём примере это /, a, b и c). А лучше использовать язык более широкого применения, в котором такие пляски не понядобятся, потому что через год понять эту белиберду на регекспах будет сложно. -- Alexander Galanin -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20130619221351.5bb70378bef1605e76a16...@galanin.nnov.ru
Re: помогите с sed и подпрограммой
Владимир Скубриев - debian-russian@lists.debian.org @ Tue, 18 Jun 2013 17:49:32 +0400: ВС Есть файл в котором есть строки на подобии этой: ВС userPassword:: e1NIQX1WN3k5OFpIMU9FMEQ2TFVFb0loSHRGaHkycVk9 ВС Это значение справа - в кодировке base64. ВС Его нужно раскодировать. ВС Начал писать sed скрипт и застопорился на том, как мне найденную подстроку ВС теперь преобразовать и именно на результат преобразования заменить ВС sed -i '/^userPassword::/s/\(^userPassword:: \)\(.*\)$/\2/' /tmp/passwd ВС \2 - уже возвращает чисто само значение. ВС то есть скрипт меняет всю строку на само значение закодированное. ВС теперь я хотел бы его передать чему то, что вернуло бы раскодированное ВС значение. ВС идея была использовать openssl, правда он у меня кое что лишнее возвращает ВС пока - но не беда разберусь. (ругается при запуске на WARNING: can't open ВС config file: /usr/lib/ssl/openssl.cnf ) ВС echo e1NIQX1WN3k5OFpIMU9FMEQ2TFVFb0loSHRGaHkycVk9 | openssl enc -base64 -d ВС Возвращает нужный мне хэш пользователя ldap ). ВС Но хотелось бы как то его выполнить прямо в контексте седа. ВС subscript=`четотам` ВС Я читал что про $subscript ВС Но как это называется в sed и как его правильно вставить в подстроку для ВС замены не могу найти. ВС Есть подозрение, что это не будет работать, тогда подскажите пожалуйста как ВС правильней? sed, помнится, делать так не умеет. Стоит взять perl. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/877ghrscdq@wizzle.ran.pp.ru
Re: помогите с sed и подпрограммой
On Tue, Jun 18, 2013 at 10:29:47PM +0400, Владимир Скубриев wrote: да как бы перла еще не хватало ) видел я примеры на нем, но хотелось бы все таки без всяких там perl, ruby, python, etc В sed такие вещи писать сложно bash http://vladz.devzero.fr/svn/codes/bash/base64.sh или perl perl -MMIME::Base64 -F: -a -ne '@a=@F; $a[1]=decode_base64($a[1]); print join (:,@a)' file -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20130618184131.ga22...@nano.ioffe.rssi.ru
Re: помогите с sed и подпрограммой
18.06.2013 18:48, Artem Chuprina пишет: Владимир Скубриев - debian-russian@lists.debian.org @ Tue, 18 Jun 2013 17:49:32 +0400: ВС Есть файл в котором есть строки на подобии этой: ВС userPassword:: e1NIQX1WN3k5OFpIMU9FMEQ2TFVFb0loSHRGaHkycVk9 ВС Это значение справа - в кодировке base64. ВС Его нужно раскодировать. ВС Начал писать sed скрипт и застопорился на том, как мне найденную подстроку ВС теперь преобразовать и именно на результат преобразования заменить ВС sed -i '/^userPassword::/s/\(^userPassword:: \)\(.*\)$/\2/' /tmp/passwd ВС \2 - уже возвращает чисто само значение. ВС то есть скрипт меняет всю строку на само значение закодированное. ВС теперь я хотел бы его передать чему то, что вернуло бы раскодированное ВС значение. ВС идея была использовать openssl, правда он у меня кое что лишнее возвращает ВС пока - но не беда разберусь. (ругается при запуске на WARNING: can't open ВС config file: /usr/lib/ssl/openssl.cnf ) ВС echo e1NIQX1WN3k5OFpIMU9FMEQ2TFVFb0loSHRGaHkycVk9 | openssl enc -base64 -d ВС Возвращает нужный мне хэш пользователя ldap ). ВС Но хотелось бы как то его выполнить прямо в контексте седа. ВС subscript=`четотам` ВС Я читал что про $subscript ВС Но как это называется в sed и как его правильно вставить в подстроку для ВС замены не могу найти. ВС Есть подозрение, что это не будет работать, тогда подскажите пожалуйста как ВС правильней? sed, помнится, делать так не умеет. Стоит взять perl. да как бы перла еще не хватало ) видел я примеры на нем, но хотелось бы все таки без всяких там perl, ruby, python, etc -- С Уважением, специалист по техническому и программному обеспечению, системный администратор Скубриев Владимир ~~~ Россия, Ростовская область, г. Таганрог тел. моб: +7 (918) 504 38 20 skype: v.skubriev icq: 214-800-502 www: skubriev.ru -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/51c0a71b.10...@skubriev.ru
Re: помогите с sed и подпрограммой
On Tue, 18 Jun 2013 22:29:47 +0400 Владимир Скубриев vladi...@skubriev.ru wrote: ВС то есть скрипт меняет всю строку на само значение закодированное. ВС теперь я хотел бы его передать чему то, что вернуло бы раскодированное ВС значение. sed, помнится, делать так не умеет. Стоит взять perl. да как бы перла еще не хватало ) видел я примеры на нем, но хотелось бы все таки без всяких там perl, ruby, python, etc Можно попробовать на gawk переписать, там есть возможность вызова внешних команд: command | getline [var] Run command piping the output either into $0 or var, as above. Может и более традиционный awk (mawk, nawk или что там у нас по умолчанию ставится?) это умеет, проверьте сами. -- Alexander Galanin -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20130618224420.79846ceb47d24b8be87a9...@galanin.nnov.ru
Re: помогите с sed и подпрограммой
sed -i '/^userPassword::/s/\(^userPassword:: \)\(.*\)$/\2/' /tmp/passwd \2 - уже возвращает чисто само значение. то есть скрипт меняет всю строку на само значение закодированное. для начала, зачем эти сложности? s/^userPassword:\ // все! банальная же операция, отрезаем ненужное)) echo e1NIQX1WN3k5OFpIMU9FMEQ2TFVFb0loSHRGaHkycVk9 | openssl enc -base64 -d Возвращает нужный мне хэш пользователя ldap ). в coreutils есть утилита base64, не надо никаких openssl (который еще не везде есть) и тем более скриптов на баше, как ниже приводили. Но хотелось бы как то его выполнить прямо в контексте седа. subscript=`четотам` Я читал что про $subscript Но как это называется в sed и как его правильно вставить в подстроку для замены не могу найти. а зачем? когда мне нужно строку заменить на результат выполнения какой-то команды, я обычно юзаю что-то типа echo s/bla-bla-bla/$(echo sdg54SGDgsgGGXC4555 | base64 -d)/ | sed -f - -i input_file в общем, сочиняем sed-скрипт на ходу и скармливаем его на stdin. -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20130619013009.16ccb...@ulf.tvoe.tv
Re: помогите с sed и подпрограммой
On Wed, 19 Jun 2013 01:30:09 +0400 dimas dimas...@ya.ru wrote: а зачем? когда мне нужно строку заменить на результат выполнения какой-то команды, я обычно юзаю что-то типа echo s/bla-bla-bla/$(echo sdg54SGDgsgGGXC4555 | base64 -d)/ | sed -f - -i input_file в общем, сочиняем sed-скрипт на ходу и скармливаем его на stdin. Это не сработает, например, со строкой YmxhaC9ibGFoCg==, переданной на вход base64 -d. А всё потому, что спецсимволы стоит экранировать. -- Alexander Galanin -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20130619091232.3e2efe8c4c5c50fc85cde...@galanin.nnov.ru
Re: помогите с sed и подпрограммой
On 19.06.2013 01:30, dimas wrote: sed -i '/^userPassword::/s/\(^userPassword:: \)\(.*\)$/\2/' /tmp/passwd \2 - уже возвращает чисто само значение. то есть скрипт меняет всю строку на само значение закодированное. для начала, зачем эти сложности? s/^userPassword:\ // все! банальная же операция, отрезаем ненужное)) что означает обратный слэш после s/^userPassword: ? echo e1NIQX1WN3k5OFpIMU9FMEQ2TFVFb0loSHRGaHkycVk9 | openssl enc -base64 -d Возвращает нужный мне хэш пользователя ldap ). в coreutils есть утилита base64, не надо никаких openssl (который еще не везде есть) и тем более скриптов на баше, как ниже приводили. вот это хорошо. спасибо. сам не догадался посмотреть Но хотелось бы как то его выполнить прямо в контексте седа. subscript=`четотам` Я читал что про $subscript Но как это называется в sed и как его правильно вставить в подстроку для замены не могу найти. а зачем? когда мне нужно строку заменить на результат выполнения какой-то команды, я обычно юзаю что-то типа echo s/bla-bla-bla/$(echo sdg54SGDgsgGGXC4555 | base64 -d)/ | sed -f - -i input_file в общем, сочиняем sed-скрипт на ходу и скармливаем его на stdin. таких строк много это раз значение на которое нужно поменять не определено заранее и зависит от того, что идет после userPassword:: Вот кусок исходного файла: # anthropics, users, example.lab dn: cn=anthropics,ou=users,dc=example,dc=lab cn: Anthropics Client cn: anthropics description: Anthropics Client gidNumber: 1901 homeDirectory: /home/anthropics loginShell: /bin/bash mail: anthrop...@example.com objectClass: simpleSecurityObject objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount sn: Anthropics uid: anthropics uidNumber: 2019 userPassword:: e1NIQX1vTzU2WHBYMlU3cmZFWkJpL3I4UGUvYjNyb0k9 # apotash01, users, example.lab dn: cn=apotash01,ou=users,dc=example,dc=lab cn: Adam Potash cn: apotash01 description: Passenger monitoring project gidNumber: 1901 homeDirectory: /home/apotash01 loginShell: /bin/bash mail: apotas...@example.com objectClass: simpleSecurityObject objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount sn: Potash uid: apotash01 uidNumber: 2032 userPassword:: e1NIQX1rVGkyNVBYd3FOZlNURXZkT1d3Q1FPZGZ5OVk9 -- С Уважением, специалист по техническому и программному обеспечению, системный администратор Скубриев Владимир ~~~ Россия, Ростовская область, г. Таганрог тел. моб: +7 (918) 504 38 20 skype: v.skubriev icq: 214-800-502 www: skubriev.ru
Re: помогите с sed и подпрограммой
On 18.06.2013 22:41, l...@1917.com wrote: On Tue, Jun 18, 2013 at 10:29:47PM +0400, Владимир Скубриев wrote: да как бы перла еще не хватало ) видел я примеры на нем, но хотелось бы все таки без всяких там perl, ruby, python, etc В sed такие вещи писать сложно bash http://vladz.devzero.fr/svn/codes/bash/base64.sh или perl perl -MMIME::Base64 -F: -a -ne '@a=@F; $a[1]=decode_base64($a[1]); print join (:,@a)' file спасибо. если с awk command не получится будут юзать именно его -- С Уважением, специалист по техническому и программному обеспечению, системный администратор Скубриев Владимир ~~~ Россия, Ростовская область, г. Таганрог тел. моб: +7 (918) 504 38 20 skype: v.skubriev icq: 214-800-502 www: skubriev.ru -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/51c140a5.4090...@skubriev.ru
Re: помогите с sed и подпрограммой
18 июня 2013 г., 17:49 пользователь Владимир Скубриев vladi...@skubriev.ru написал: Есть файл в котором есть строки на подобии этой: userPassword:: e1NIQX1WN3k5OFpIMU9FMEQ2TFVFb0loSHRGaHkycVk9 Это значение справа - в кодировке base64. Его нужно раскодировать. Можно поинтересоваться? Что с чем женим?
Re: помогите с sed и подпрограммой
On 19.06.2013 09:30, Dmitry A. Zhiglov wrote: 18 июня 2013 г., 17:49 пользователь Владимир Скубриев vladi...@skubriev.ru написал: Есть файл в котором есть строки на подобии этой: userPassword:: e1NIQX1WN3k5OFpIMU9FMEQ2TFVFb0loSHRGaHkycVk9 Это значение справа - в кодировке base64. Его нужно раскодировать. Можно поинтересоваться? Что с чем женим? бэкап отдельных OU из openldap ни slapcat ни ldapsearch не возвращают нормальные пароли и не которые другие поля у меня например еще email поле нужно раскодировать -- С Уважением, специалист по техническому и программному обеспечению, системный администратор Скубриев Владимир ~~~ Россия, Ростовская область, г. Таганрог тел. моб: +7 (918) 504 38 20 skype: v.skubriev icq: 214-800-502 www: skubriev.ru -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/51c143af.2050...@skubriev.ru