nixp.ru v3.0

20 октября 2017,
пятница,
10:04:59 MSK

DevOps с компанией «Флант»
unname написал 30 августа 2004 года в 21:48 (388 просмотров) Ведет себя неопределенно; открыл 9 тем в форуме, оставил 50 комментариев на сайте.

тут такое дело нужна прога для того чтобы иправлять определеннве строки в определенных файлах, подумав решил что лучшим в данном случае языком будет perl начал в нем разбираться, но вот почему-то не работает у меня олператор замены s/// :(

вот конкретный пример:

#!/usr/bin/perl -w

open LOCAL,«+<./proba» or die «Can’t open file: $! \n» ;

while(){$l=s/ru+/try/;print «$l \n»;};

close;

в файле проба содержание типа

ljhljh

,n,nbm

ru

ghgjk

ru

hkjhk

ну и дальше белиберда ))

если в это примере есть ошибка то пожалуйста укажите её ( ну 2 дня уже сижу над 3 строками кода)

если нет то почему всетаки не меняется ru на try ?

З.Ы. извините за ошиьки, пишу одной рукой, вторая в гипсе))

З.З.Ы. нет ли под linux редактора типа средыы turbopascal или c++ от борланда под винду. не по теме конечно но все же

anonymous

>> while(){$l=s/ru+/try/;print «$l \n»;}; >>

Мне кажется, что должно быть так:

while(){$l=~s/ru+/try/;print «$l \n»;};

Или даже вот так:

while(){$l=~s/(ru)+/try/;print «$l \n»;};

Uncle Theodore

А еще лучше — вот так :-)

#!/usr/bin/perl -w

open LOCAL,«+<./proba» or die «Can’t open file: $! \n» ;

while(){

$l=$_;

$l=~s/ru+/try/;

print «$l \n»;

};

close;

Good Luck,

UT

Uncle Theodore
unname
З.З.Ы. нет ли под linux редактора типа средыы turbopascal или c++ от борланда под винду. не по теме конечно но все же

Почему нет, есть. Source Navigator, Borland C builder, Emacs… :-)

Good Luck,

UT

unname

ну а если вот так записать просто:

while(){s/(ru)+/try/;};

но всеравно ничего не переписываеися в файле, даже в ваших скриптах :((

unname
Uncle Theodore
#!/usr/bin/perl -w

open LOCAL,«+<./proba» or die «Can’t open file: $! \n» ;

while(){

$l=$_;

$l=~s/ru+/try/;

print «$l \n»;

};

close;

этот же скрипт просто выводит файл на экран, и меняет значение , но он не записывает это в файл, конечно можно переписать в другой файл вывод, но хотелось бы В этом же файле сделать

decvar

наверное я идиот, но я бы писал на C. Хоть понятнее было бы…..

sarel

Вот эт точно…я почему-то тоже так подумал…:)

sarel

:) Всмысле что на C…

Anarchist
Uncle Theodore
Почему нет, есть. Source Navigator, Borland C builder, Emacs… :-)

Нафиг. vim/emacs по вкусу.

Uncle Theodore
unname
этот же скрипт просто выводит файл на экран, и меняет значение , но он не записывает это в файл, конечно можно переписать в другой файл вывод, но хотелось бы В этом же файле сделать

К сожалению, того, что ты хочешь сделать нельзя (если я правильно понимаю, ты хочешь открыть файл, изменить его часть на месте и закрыть). Файл открывается для либо

чтения

полной перезаписи

добавления

и все. Редакторы грузят файл в буфер, ты редактируешь этот буфер, потом этот редактор пишет буфер поверх первоначального файла. В принципе, наверное, можно было бы менять то, на что указывает хэндл, но тебе пришлось бы спускаться на низкий уровень.

Отсюда вывод: Считывай файл в буффер (массив или там стрингу), редактируй ее и пиши поверх старого файла.

>> Нафиг. vim/emacs по вкусу.

Он спросил, что есть похожего на борланд, а не в чем я программирую… :-)

Good Luck,

UT

Uncle Theodore
sarel
:) Всмысле что на C…

Проекты такого масштаба пишутся на том, на чем удобно их писать программисту. Вот если б он девайсный драйвер на перле рисовал, можно было бы удивиться…

Good Luck,

UT

unname

файлы в перле могут быть открыты для изменения, по крайней мере так написано тв книге, просто там почему-то оператор s не работает :(

а так считывает и пишет.

но я уже дописал на основе последнего скрипта то что мне нужно было.

Я просто поставил linux slackware уже компов на 7 и каждый раз в ручную русифицировал :(

вот и решил написать скрипт для русификации)) вот кусок кода:

#!/usr/bin/perl -w

$filename;

$bilo;

$stalo;

$n=0;

sub ZAMENA {

$n++;

print «zamena »;

print «$n \n»;

open LOCAL,«<$filename» or die «Can’t open file: $! \n» ;

open LOCAL2,«>./proba2» or die «Can’t open file: $! \n» ;

while(){

$l=$_;

if($_!~/#/){$l=~s/$bilo/$stalo/;};

print LOCAL2 «$l»;

};

close LOCAL2;

close LOCAL;

unlink «$filename»;

rename «./proba2», «$filename»;

};

З.Ы. в перл я только начал разбираться (полрядка недели) так что и использую глобальные переменные. не нравится мне как он параметры в подпрограмму передает.

Не на shell же мне эти скрипты писать.

а если на Cях то компилить долбше))

З.З.Ы. А пока мне больше по душе emacs но что-то не то всеравно)), вот и пише пока в редакторе от mc, жаль мышь не поддерживает.

Dreid
unname
Не на shell же мне эти скрипты писать.

На shell, на shell. +sed.

unname
З.З.Ы. А пока мне больше по душе emacs но что-то не то всеравно)), вот и пише пока в редакторе от mc, жаль мышь не поддерживает.

Вполне себе поддерживает.

Просто он может быть откомпилен без этой поддержки.

Но vi все равно удобнее :)

Dreid

И вообще, изменил бы файлы один раз и залил на все компы.

Uncle Theodore
unname
Не на shell же мне эти скрипты писать.

Ну, дело, конечно, хозяйское… :-) Вот тебе пищча для размышлений однако:

$ cat file1.txt

abra1

bylo2

cadabra3

$ sed -e ’s/bylo/stalo/ ' file1.txt > tempfile && mv tempfile file1.txt

$ cat file1.txt

abra1

stalo2

cadabra3

Good Luck,

UT

Genie

можно и на awk, кстати ;)

инструментов — море. главное определиться. ;)

unname

все, уже сделал, правда коряво но должна работать, единствееное надо найти конфиг иксов от нерусифицированной системы, чтоб прописать настройки клавиатуры правильно

спасибо всем.