URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 85285
[ Назад ]

Исходное сообщение
"sed нужно заменить строку по 1 параметру"

Отправлено maximka , 15-Май-09 18:05 
Доброго времени суток!!!
freebsd 7.1, sh
проблема следующего характера:
есть файл с содержимым:
ipfw table 4 add 192.168.5.92
ipfw table 6 add 192.168.1.119
ipfw table 6 add 192.168.2.226
ipfw table 3 add 192.168.3.40
ipfw table 6 add 192.168.5.174
ipfw table 8 add 192.168.4.225
ipfw table 3 add 192.168.2.224
ipfw table 4 add 192.168.3.211
ipfw table 8 add 192.168.1.73
ipfw table 4 add 192.168.0.179
ipfw table 5 add 192.168.1.124
нужно при поиске пользоваться ip но поменять не ip а всю строку на заданную.
sed 's/$ip/ipfw table 4 add any ip/' tables.sh > tmp
у меня получается что он меняет искомое слово и заменяет его на ipfw table 4 add any ip
а он должен заменить всю строку.
В чем загвоздка)?
Заранее спасибо)
P.S. а можно ли так сделать чтобы изменения вносились в тот файл из которого они и берутся.(perl не предлагать)

Содержание

Сообщения в этом обсуждении
"sed нужно заменить строку по 1 параметру"
Отправлено Pahanivo , 15-Май-09 18:27 
>[оверквотинг удален]
> ipfw table 6 add 192.168.5.174
> ipfw table 8 add 192.168.4.225
> ipfw table 3 add 192.168.2.224
> ipfw table 4 add 192.168.3.211
> ipfw table 8 add 192.168.1.73
> ipfw table 4 add 192.168.0.179
> ipfw table 5 add 192.168.1.124
>нужно при поиске пользоваться ip но поменять не ip а всю строку
>на заданную.
>sed 's/$ip/ipfw table 4 add any ip/' tables.sh > tmp

sed 's/^.* YOU_IP .*$/ipfw table 4 add any YOU_IP/' tables.sh > tmp

> у меня получается что он меняет искомое слово и заменяет его
>на ipfw table 4 add any ip
>а он должен заменить всю строку.
>В чем загвоздка)?
>Заранее спасибо)
>P.S. а можно ли так сделать чтобы изменения вносились в тот файл
>из которого они и берутся.(perl не предлагать)

куда тебе перл - ты до элементарного регекса додуматся не могешь ))))


"sed нужно заменить строку по 1 параметру"
Отправлено maximka , 16-Май-09 11:30 
>[оверквотинг удален]
>> у меня получается что он меняет искомое слово и заменяет его
>>на ipfw table 4 add any ip
>>а он должен заменить всю строку.
>>В чем загвоздка)?
>>Заранее спасибо)
>>P.S. а можно ли так сделать чтобы изменения вносились в тот файл
>>из которого они и берутся.(perl не предлагать)
>
>куда тебе перл - ты до элементарного регекса додуматся не могешь ))))
>

от перла отказался из-за его медлительности.

спасибо за помощь!!!
$w="192.168.5.92 ";
print system("sed 's/^.* $w .*$/ipfw table ww add any $w/' tables.sh > tmp

sed: 1: "s/^.* 192.168.5.92 .*
i ...": unterminated substitute pattern
Syntax error: Unterminated quoted string

из командной строки отработало на ура!!!!
но из скрипта с ошибкой)


"sed нужно заменить строку по 1 параметру"
Отправлено angra , 16-Май-09 18:24 
>от перла отказался из-за его медлительности.

"Плохому танцору штаны виноваты" народная мудрость
"Нечего на зеркало пенять коли рожа крива" народная мудрость
"Нет плохих языков, есть плохие программисты" народная мудрость

>$w="192.168.5.92 ";
>print system("sed 's/^.* $w .*$/ipfw table ww add any $w/' tables.sh > tmp

Вот и пример плохого программиста/админа, которому во всем виноват гнусный ЯП. Этот же гнусный ЯП нагло проинтерполировал _все_ переменные в строке.  Вот ведь какая падла, нет чтобы воспользоваться телепатией и узнать у горе-программиста, что нужно интерполировать, а что нет.

"Учится, учится и еще раз учится" В.И. Ленин


"sed нужно заменить строку по 1 параметру"
Отправлено maximka , 16-Май-09 21:27 
>[оверквотинг удален]
>
>>$w="192.168.5.92 ";
>>print system("sed 's/^.* $w .*$/ipfw table ww add any $w/' tables.sh > tmp
>
>Вот и пример плохого программиста/админа, которому во всем виноват гнусный ЯП. Этот
>же гнусный ЯП нагло проинтерполировал _все_ переменные в строке.  Вот
>ведь какая падла, нет чтобы воспользоваться телепатией и узнать у горе-программиста,
>что нужно интерполировать, а что нет.
>
>"Учится, учится и еще раз учится" В.И. Ленин

Спасибо за помощь)!
Вам трактаты писать нужно, талант!


"sed нужно заменить строку по 1 параметру"
Отправлено maximka , 18-Май-09 13:35 

$w="192.168.5.92";
$ww="sed  's/^.*$w*.\$/wwwwwwwwwwwwwwwwwwwwipfw table ww add any w/' tables.sh > tmp";

print system($ww);

Вдруг кому пригодится)
А то умников развелось много(!!!