2015-05-27 2 views
0

мне нужно, чтобы иметь возможность запускать скрипт на языке Perl, который ищет и заменяет 3 строки под [RemotePhoneBook0]Perl поиск и замену с новыми линиями

так вот отрывок из файла:

[ RemotePhoneBook0 ] 
path = /config/Setting/Setting.cfg 
URL = 
Name = 

[ RemotePhoneBook1 ] 
path = /config/Setting/Setting.cfg 
URL = 
Name = 

Я не могу коснуться [RemotePhoneBook1]. Когда я закончу этот же отрывок выше должен выглядеть следующим образом:

[ RemotePhoneBook0 ] 
path = /somePath/to/someDir 
URL = someUrl 
Name = someName 

[ RemotePhoneBook1 ] 
path = /config/Setting/Setting.cfg 
URL = 
Name = 



s/^<<<what can i put here>>>\s*=.*/somePath/; 
s/^<<<what can i put here>>>\s*=.*/someUrl/; 
s/^<<<what can i put here>>>\s*=.*/someName/; 
+0

Вы делаете что-то вроде [this] (http://stackoverflow.com/a/15332095/4883117), сопоставляя 'RemotePhoneBook0', а затем читаете и редактируете следующие три строки. –

+0

Похоже на файл ini. Взгляните на https://metacpan.org/pod/Config%3a%3aIniFiles – texasbruce

ответ

0

Для потомков этого является то, что я сделал:

open my $in,"<","$directory/$files"; 
    open my $out,">","$directory/temp.txt"; 

    my @lines = <$in>; 
    close $in; 
    #print "@lines"; 
    for($index=0;$index<=$#lines;$index++){ 
      my $this = $lines[$index]; 
      if ($this eq "[ RemotePhoneBook0 ]\n"){ 
        $lines[$index] = "[ RemotePhoneBook0 ]\n"; 
        $lines[$index+1] = "path=\n"; 
        $lines[$index+2] = "URL = http:\/\/someUrl\n"; 
        $lines[$index+3] = "Name = Users\n"; 
        $lines[$index+4] = "\n"; 
        $index++; 
        $index++; 
        $index++; 
        $index++; 
        }else{ 
          $lines[$index] = $this,"\n"; 
        } 
    } 
    print $out @lines; 

это печатает каждую строку при замене строк, о которых я забочусь.

2

Я хотел бы использовать Config::IniFiles для такой задачи:

use warnings; 
use strict; 

use Config::IniFiles; 

my $ini = Config::IniFiles->new(-file => "stackoverflow_30472923.ini"); 

# print $ini->val("RemotePhoneBook0", "path"); 

$ini -> setval('RemotePhoneBook0', 'path', '/somePath/to/someDir'); 
$ini -> setval('RemotePhoneBook0', 'URL' , 'someUrl'   ); 
$ini -> setval('RemotePhoneBook0', 'Name', 'someName'   ); 

$ini -> WriteConfig("stackoverflow_30472923.modified.ini"); 
+0

администраторы сервера, над которым я работаю, не позволят мне добавлять какие-либо модули, и на этом сервере не хватает IniFiles ..... – bart2puck

Смежные вопросы