non-GNU sed

Sep. 3rd, 2009 11:52 am
redtigra: (Default)
[personal profile] redtigra
Пишу себе на память, потому что сколько-то времени потратила. Имеем bash и неГНУщийся sed.

1. Нужно:

sed -e "s/SUBST_HOMEDIR/$HOMEDIR/g" filename

при этом $HOMEDIR а) генерируется динамически, то есть прописать значение жестко нельзя, и b) имеет вид типа /foo/bar/get/out, то есть содержит слэши - "/" - от которых sed теряет ориентацию. То есть надо экранировать слэши.

Решение:
HOMEDIR=`echo $HOMEDIR | sed 's,/,\\\\\/,g'`
sed -e "s/SUBST_HOMEDIR/$HOMEDIR/g" filename


2. Та же проблема, но с генерируемым IP, который, зараза, содержит точки, решилась проще. Экранируем точки:

HOST_IP=`echo "$HOST_IP" | sed 's/\./\\./g'`

3. Ну и наконец - оооо - замена только первого совпадения в файле при том, что sed is non-GNU:

sed -e '/RE/{s//to_that/;:a' -e '$!N;$!ba' -e '}' file #замена первого вхождения RE на to_that

Для сравнения - так это выглядит в GNU-sed:

sed '1,/RE/s//to_that/' file



Aх да, еще вот - хороший faq по sed-у

Date: 2009-09-03 09:54 am (UTC)
rampitec: (Default)
From: [personal profile] rampitec
А твой sed не понимает разделители, кроме слешей? Вот так:

sed "s|match|repl|g"

Date: 2009-09-03 09:57 am (UTC)
From: [identity profile] redtigra.livejournal.com
Мне не удалось его уговорить, я пробовала. man гласит:

(2)s/pattern/replacement/flags
Substitutes the replacement string for the first occurrence of the pattern parameter in the pattern space. Any character that is displayed
after the s subcommand can substitute for the / (slash) separator except for the space or new-line character.


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

Date: 2009-09-03 10:01 am (UTC)
rampitec: (Default)
From: [personal profile] rampitec
Жаль. Но могу сказать, что в гнусном их экранировать не надо, если сепаратор выбран другой. Регулярно пользуюсь. А где ты такой sed нашла? Под той же солярой есть gsed...

Date: 2009-09-03 10:09 am (UTC)
From: [identity profile] redtigra.livejournal.com
*сумрачно* под AIX, ясен пень. там все негнушное. и тар, и сед...

Date: 2009-09-03 10:11 am (UTC)
rampitec: (Default)
From: [personal profile] rampitec
Ой! Сочувствую... Видел я тот аикс, соляре до его нордичности далеко.

Date: 2009-09-03 10:13 am (UTC)
From: [identity profile] redtigra.livejournal.com
ничего. последние дни я не нем живу,с понедельника другой проект с солярисом. "Домой, домой вернулся моряк, и охотник вернулся с холмов" :)

Date: 2009-09-08 09:18 am (UTC)
From: [identity profile] michaelselehov.livejournal.com
Главное, "reboot now" не набирай ;)

Date: 2009-09-08 04:28 pm (UTC)
From: [identity profile] redtigra.livejournal.com
:)))
было время золотое. но у меня на них рута нету :)

Date: 2009-09-03 10:14 am (UTC)
From: [identity profile] sertoun.livejournal.com
(зачарованно смотрит синенькими и пустенькими, как у котят, глазами) не фонит. и переливается.

Date: 2009-09-03 10:20 am (UTC)
From: [identity profile] redtigra.livejournal.com
не фонит совершенно.

Date: 2009-09-03 01:31 pm (UTC)
From: [identity profile] yucca.livejournal.com
Ой, а нельзя все это на Перле написать? :)

Date: 2009-09-03 01:51 pm (UTC)
From: [identity profile] redtigra.livejournal.com
я была уверена, что кто-нибудь да предложит. :)

не стоит, потому что весь остальной инструментарий - а его много - на bash, и смешивать не хочется. Кроме того, скрипт унаследует дядька (я завтра уеду) - ORACLE-бог, но со скриптовымы языками на вы и с перлом не очень общается, а все обвязки предпочитает на ksh или вообше, господи помоги, пишет sql-скриптики, ему так удобней.

Словом, написать можно, но по ряду причин в данном конкретном случае не стоит.

Date: 2009-09-03 03:17 pm (UTC)
From: [identity profile] oxfv.livejournal.com
Я, конечно, не юниксоид, но согласен с оратором выше. Если вопрос в maintainability, то вот такие зубодробительные строчки, особенно последняя, крайне unmaintainable. На перле или на моем любимом питоне все это займет строчки четыре прекрасно читаемого текста (ну, на питоне прекрасно читаемого, за перл не скажу).

Date: 2009-09-04 07:38 am (UTC)
From: [identity profile] redtigra.livejournal.com
в итоге последняя строчка не понадобилась, и вообще весь скрипт в итоге был переделан в крайне простую и читаемую форму. зубодробительность с регекспами практически неизбежна, а питон - во-первых, я его знаю неизмеримо хуже, чем перл и баш, и учить его ради срочного скрипта в сорок строк, при всем уважении, не буду, во-вторых, дорогой неюниксоид, в отличие от перла и шелла питон не является универсально находимым на практически любой юникс-платформе инструментом. Простейшая интерполяция из того факта, что я не вынуждена пользоваться не-гну версией, приводит к выводу, что у меня нет рута на хосте и возможности приплетения другого софта сильно ограничены, это а, и сказывается на переносимости скрипта, это б. Не говоря уж о том, что скрипт должен легко читаться и майнтейниться другим человеком, для которого и писался. Словом, там есть совокупность причин, обуславливающих выбор инструментария, и ну вот правда, без их учета совет звучит немножко голословно. (Но я поняла твои чувства к питону и прониклась ;) )

Date: 2009-09-04 07:40 am (UTC)
From: [identity profile] redtigra.livejournal.com
Я имела в виду - как-то нехорошо звучит - что именно в ситуации, когда мне надо за вечер закончить скрипт для простого генерирования конфигов - я не полезу срочно читать питон, я не очень хорошо изучаю материал в таких условиях.

Date: 2009-09-04 07:52 am (UTC)
From: [identity profile] oxfv.livejournal.com
Да я понимаю всё, хотя мне эти проблемы и не близки. Я просто среагировал на сочетание зубодробительных седовских заклинаний и необходимость поддерживать их человеку, который плохо разбирается в скриптовых языках. Учить питон за вечер в любом случае не нужно - и пользы мало, и весь кайф поломаешь :) А перл-то, небось, не сильно очевиднее седа будет (если вообще).

Date: 2009-09-03 05:24 pm (UTC)
rampitec: (Default)
From: [personal profile] rampitec
Я вот даже не стал предлагать ;) Нет, значит нет. Сам зоопарк не люблю.

Date: 2009-09-04 04:50 am (UTC)
From: [identity profile] yucca.livejournal.com
ясненько :)

March 2022

S M T W T F S
  12345
678910 1112
1314 15 16171819
202122 23242526
27 28293031  

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 13th, 2026 07:49 am
Powered by Dreamwidth Studios