найти и заменить строки конфигурации в файле - PullRequest
1 голос
/ 15 августа 2011

Я пытаюсь запрограммировать скрипт bash, чтобы сделать некоторые замены в файле конфигурации.

Файл теста conf выглядит так:

pm.max_children = 50
bla bla bla pm.max_children
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 30
;pm.max_requests = 20000

Замены, которые мне нужно сделать:

pm.max_children = 5
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 2000

Мне нужно запустить эту программу из bash-скрипта.

Ответы [ 2 ]

3 голосов
/ 15 августа 2011

Вот более простая версия с использованием sed:

#!/usr/bin/sed -f
s/^\(pm.max_children = \).*/\15/
s/^\(pm.start_servers = \).*/\11/
s/^\(pm.min_spare_servers = \).*/\11/
s/^\(pm.max_spare_servers = \).*/\13/
s/^\(pm.max_requests = \).*/\12000/

Можете ли вы поместить это в отдельный файл и вызвать его из своего скрипта?

Я согласен с Kerrek SB - это поможет, еслиВы бы объяснили, чего пытаетесь достичь!

2 голосов
/ 15 августа 2011
#!/usr/bin/perl
use warnings;
use strict;

my %vals = (
    'pm.max_children'      => 5,
    'pm.start_servers'     => 1,
    'pm.min_spare_servers' => 1,
    'pm.max_spare_servers' => 3,
    'pm.max_requests'      => 2000,
);

while (<DATA>) {
    if ( my($param) = /^(\S+)\s*=/ and exists $vals{$1} ) {
        s/\d+$/$vals{$param}/;
    }
    print;
}

__DATA__
pm.max_children= 50
bla bla bla pm.max_children
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm.max_requests = 20000
...