Что то не работает sed

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

Что то не работает sed

Непрочитанное сообщение manefesto » 2007-11-26 7:27:40

Вообщем у меня есть вот такая маленькая связочка:

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

sed -e "s/DIST_SUBDIR/\#DIST_SUBDIR/g" `find /usr/ports -type f -name Makefile`
Но почему после выполнения этой команды у меня в Makefile не происходят изминения, хотя в stdout они выводятся и вроде бы есть, а когда заглядываю в сам Makefile то там без изминений
я такой яростный шо аж пиздеЦ
Изображение

Хостинговая компания 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/

Аватара пользователя
idle
мл. сержант
Сообщения: 80
Зарегистрирован: 2007-02-28 12:21:52
Откуда: Барселона
Контактная информация:

Re: Что то не работает sed

Непрочитанное сообщение idle » 2007-11-26 10:02:58

manefesto писал(а):Вообщем у меня есть вот такая маленькая связочка:

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

sed -e "s/DIST_SUBDIR/\#DIST_SUBDIR/g" `find /usr/ports -type f -name Makefile`
Но почему после выполнения этой команды у меня в Makefile не происходят изминения, хотя в stdout они выводятся и вроде бы есть, а когда заглядываю в сам Makefile то там без изминений
Всё правильно.
man sed. Буквально в первом абзаце всё написано.

Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

Re: Что то не работает sed

Непрочитанное сообщение manefesto » 2007-11-26 10:11:01

Вообщем ХЗ что там и где написано. Читал русские маны, вообщем просветление не пришло поэтому переписал следующим образом:

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

#!/bin/sh

for i in `find /usr/ports -type f -name Makefile`; do
        echo "search in $i"
        cat /dev/null > /tmp/tmp.port
        sed -e "s/DIST_SUBDIR/#DIST_SUBDIR/g" $i >> /tmp/tmp.port
        cat /tmp/tmp.port > $i
done
PS: Если не сложно чиркни как будет правильно только с использование sed
я такой яростный шо аж пиздеЦ
Изображение

Аватара пользователя
idle
мл. сержант
Сообщения: 80
Зарегистрирован: 2007-02-28 12:21:52
Откуда: Барселона
Контактная информация:

Re: Что то не работает sed

Непрочитанное сообщение idle » 2007-11-26 10:20:02

manefesto писал(а):Вообщем ХЗ что там и где написано. Читал русские маны, вообщем просветление не пришло поэтому переписал следующим образом:

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

#!/bin/sh

for i in `find /usr/ports -type f -name Makefile`; do
        echo "search in $i"
        cat /dev/null > /tmp/tmp.port
        sed -e "s/DIST_SUBDIR/#DIST_SUBDIR/g" $i >> /tmp/tmp.port
        cat /tmp/tmp.port > $i
done
PS: Если не сложно чиркни как будет правильно только с использование sed
man sed писал(а):DESCRIPTION
The sed utility reads the specified files, or the standard input if no
files are specified, modifying the input as specified by a list of com-
mands. The input is then written to the standard output.
То есть вывод надо перенаправлять обратно в файл, что у Вас и сделано. Должно работать как надо.

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

Re: Что то не работает sed

Непрочитанное сообщение Гость » 2007-11-26 14:08:54

manefesto писал(а):Вообщем у меня есть вот такая маленькая связочка:

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

sed -e "s/DIST_SUBDIR/\#DIST_SUBDIR/g" `find /usr/ports -type f -name Makefile`
Но почему после выполнения этой команды у меня в Makefile не происходят изминения, хотя в stdout они выводятся и вроде бы есть, а когда заглядываю в сам Makefile то там без изминений
sed(1) писал(а): -I extension
Edit files in-place, saving backups with the specified extension.
If a zero-length extension is given, no backup will be saved. It
is not recommended to give a zero-length extension when in-place
editing files, as you risk corruption or partial content in situ-
ations where disk space is exhausted, etc.

Note that in-place editing with -I still takes place in a single
continuous line address space covering all files, although each
file preserves its individuality instead of forming one output
stream. The line counter is never reset between files, address
ranges can span file boundaries, and the ``$'' address matches
only the last line of the last file. (See Sed Addresses.) That
can lead to unexpected results in many cases of in-place editing,
where using -i is desired.

-i extension
Edit files in-place similarly to -I, but treat each file indepen-
dently from other files. In particular, line numbers in each
file start at 1, the ``$'' address matches the last line of the
current file, and address ranges are limited to the current file.
(See Sed Addresses.) The net result is as though each file were
edited by a separate sed instance.

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

-sed -e "s/DIST_SUBDIR/\#DIST_SUBDIR/g" `find /usr/ports -type f -name Makefile`
+find /usr/ports/ -type f -name Makefile -exec sed -i "" "s/DIST_SUBDIR/ #DIST_SUBDIR/g" {} +
Correct?