Автор Тема: закоммент-раскоммент простой текстовый редактор для админа  (Прочитано 1923 раз)

Оффлайн Axe79

  • Завсегдатай
  • *
  • Сообщений: 175
тут на досуге сервак поднимал и решил написать небольшой редактор чтоб не бегать в кед-ы и sed-ы

написал под перлом он стоит по умолчанию (/usr/bin/perl) )))
так что всего делов скопировать в файл  и написать   perl /путь/redak
если перед этим исполнить файл chmod 555 /...путь.../redak то имя интерпретатора perl указывать не нужно
(что б не править код файл желательно назвать redak)


да к стати программка запоминает все введённые адреса файлов.
(адреса пакуются прямо в файл скрипта ;)) не удивляйтесь если размер скрипта по ходу использования будет расти)))
так что потом экономите время ввода адреса

позже сделаю цикл редактирования файла)))
сейчас работает:
Закомментировать 'z' Раскомментировать 'r' Удалить 'd' Изменить 'i' строки можно сделать ещё вставку строк
и возможно какой то функционал по регулярным выражениям

#!/usr/bin/perl
use Cwd;
$cwd=cwd;
sub CHOISE{
open(FB,"$cwd/redak")or die"$!";
@fb=<FB>;
close (FB);
foreach(@fb){$n++;if (/#&(\/.*)/){print "$n $1\n";}}}

sub IN{
print "Введите полный путь и имя файла.\n";
chomp($path=<STDIN>);
open(FB,">>$cwd/redak")or die"$!";
print FB "#&", $path, "\n";
close (FB);}

sub KOMM{
foreach(@file){print $nSt++, " $_"}
print "Введите порядковый номер строки\n";
chomp($numSt=<STDIN>);
print $file[$numSt];
print "\nЗакомментировать 'z' Раскомментировать 'r' Удалить 'd' Изменить 'i' Выход 'e'\n";
chomp($choise1=<STDIN>);
   if($choise1 eq "r"){$file[$numSt]=~s/^#(.*)/$1/;}
elsif($choise1 eq "z"){$file[$numSt]=~/^(.*)/;$file[$numSt]="#$1\n";}
elsif($choise1 eq "d"){$file[$numSt]=();}
elsif($choise1 eq "i"){print "Старый вариант\n$file[$numSt]\nВведите новый вариант\n";chomp($newvar=<STDIN>);$file[$numSt]="$newvar\n"}
elsif($choise1 eq "e"){exit 0;}
open (FWRIT, ">$path")or die "$!";
for(@file){print FWRIT $_;}
close (FWRIT);}

print "Выбрать из введённых ранее ? 'y'\n";
chomp($sel=<STDIN>);
if($sel eq "y"){
CHOISE;
print "\nВведите порядковый номер файла\n";
chomp($num=<STDIN>);
$fb[$num-1]=~/^#&(.*)/;
$path=$1;}
else {IN;}

open (FILE, "$path")or die "$!";
@file=<FILE>;
close (FILE);

KOMM;
##################################################################################################################
# Axe79    Alex Grutman   icq: 280699547  e-mail: medelect@mail.ru                                               #
##################################################################################################################

#&/etc/xinetd.conf
#&/etc/xinetd.d/vsftpd
#&/etc/vsftpd/conf

« Последнее редактирование: 11.10.2009 16:18:46 от Axe79 »
Ничто так не стимулирует тягу к труду интеллектуальному, как обилие труда физического!
Gutta cavat lapidem non vi, sed saepe cadendo Капля долбит камень не силой, а частым падени

Оффлайн Axe79

  • Завсегдатай
  • *
  • Сообщений: 175
Если какие претензии, вопросы,  тапки .
Просим Просим)))))))))))))))))
Ничто так не стимулирует тягу к труду интеллектуальному, как обилие труда физического!
Gutta cavat lapidem non vi, sed saepe cadendo Капля долбит камень не силой, а частым падени

Оффлайн Axe79

  • Завсегдатай
  • *
  • Сообщений: 175
вторая версия)))
добавлена вставка строк и поиск.
поиск на основе регулярных выражений так сто смело используйте \s \d \W \n и другое

#!/usr/bin/perl
use Cwd;
$cwd=cwd;
sub CHOISE{
open(FB,"$cwd/redak")or die"$!";
@fb=<FB>;
close (FB);
foreach(@fb){$n++;if (/#&(\/.*)/){print "$n $1\n";}
if ($n==0) {IN;}}}

sub IN{
print "Введите полный путь и имя файла.\n";
chomp($path=<STDIN>);
open(FB,">>$cwd/redak")or die"$!";
print FB "#&", $path, "\n";
close (FB);}

sub FIND{
print "Введите искомый фрагмент.";
chomp($find=<STDIN>);
foreach(@file){print $nSt++, " $_";if(/$find/){$find{$nSt}=$_;}}
foreach(keys %find){print "Найдено № $_ --> $find{$_}";}}

sub NUMERASION {
foreach(@file){print $nSt++, " $_"}
print "Введите порядковый номер строки\n";
chomp($numSt=<STDIN>);
print $file[$numSt];}

sub VBO{
print "\nВыберите действие\nЗакомментировать 'z' Раскомментировать 'r'\nУдалить 'd' Вставить 'i'\nИзменить 'c' Найти 'f' Выйти 'e'\n";
chomp($choise1=<STDIN>);}

sub SAVE{
open (FWRIT, ">$path")or die "$!";
for(@file){print FWRIT $_;}
close (FWRIT);}

sub INSE{
print "\nВведите текст новой строки\n";
$TmpMas1[$numSt]=<STDIN>;
foreach (@file){
if($numSt>$nr){$TmpMas1[$nr]=$_;}
elsif($nr>=$numSt){$TmpMas2[$nr]=$_;}$nr++;}
splice (@TmpMas2, 0, 0, @TmpMas1);
@file=();@file=@TmpMas2;}

sub KOMM{
VBO;
   if($choise1 eq "r"){$file[$numSt]=~s/^#(.*)/$1/;SAVE;}
elsif($choise1 eq "z"){$file[$numSt]=~/^(.*)/;$file[$numSt]="#$1\n";SAVE;}
elsif($choise1 eq "d"){$file[$numSt]=();SAVE;}
elsif($choise1 eq "c"){print "\nВведите новый вариант\n";$file[$numSt]=<STDIN>;SAVE;}
elsif($choise1 eq "i"){INSE; SAVE;}
elsif($choise1 eq "f"){FIND;}
elsif($choise1 eq "e"){exit 0;}}
#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$
print "Выбрать из введённых ранее ? 'y'\n";
chomp($sel=<STDIN>);
if($sel eq "y"){
CHOISE;
print "\nВведите порядковый номер файла\n";
chomp($num=<STDIN>);
$fb[$num-1]=~/^#&(.*)/;
$path=$1;}
else {IN;}
open (FILE, "$path")or die "$!";
@file=<FILE>;
close (FILE);

NUMERASION;
KOMM;
####################################################################################
# Axe79    Alex Grutman   icq: 280699547  e-mail: medelect@mail.ru                 #
####################################################################################

#&/etc/xinetd.conf
#&/etc/xinetd.d/vsftpd
#&/etc/vsftpd/conf
#&/home/axe/Desktop/bindss
« Последнее редактирование: 12.10.2009 21:54:42 от Axe79 »
Ничто так не стимулирует тягу к труду интеллектуальному, как обилие труда физического!
Gutta cavat lapidem non vi, sed saepe cadendo Капля долбит камень не силой, а частым падени