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

Исходное сообщение
"Замена по шаблону + мат.операция"

Отправлено ciwl , 25-Июн-12 14:59 
Есть файл вида

Коммутатор ABC - Порт 1 - Сеть SECURITY
SOMETEXT
Коммутатор ABC - Порт 2 - Сеть SECURITY
SOMETEXT

Нужно "Порт N" увеличить на 40

Sed так не умеет, perl не ловит русские буквы. Подскажите решение задачи


Содержание

Сообщения в этом обсуждении
"Замена по шаблону + мат.операция"
Отправлено ciwl , 25-Июн-12 16:59 
#!/usr/bin/perl

use utf8;
use open IN => ':encoding(utf8)';

open(FF, "list.txt");
while(<FF>) {
        s/(?<=Порт )([0-9][0-9]?)/$1+40/ge;
        print;
}


"Замена по шаблону + мат.операция"
Отправлено LSTemp , 26-Июн-12 00:54 
> Есть файл вида
> Коммутатор ABC - Порт 1 - Сеть SECURITY
> SOMETEXT
> Коммутатор ABC - Порт 2 - Сеть SECURITY
> SOMETEXT
> Нужно "Порт N" увеличить на 40
> Sed так не умеет, perl не ловит русские буквы. Подскажите решение задачи

и перл и сед может. для начала сойдет awk & shell


"Замена по шаблону + мат.операция"
Отправлено ciwl , 26-Июн-12 01:08 
>> Есть файл вида
>> Коммутатор ABC - Порт 1 - Сеть SECURITY
>> SOMETEXT
>> Коммутатор ABC - Порт 2 - Сеть SECURITY
>> SOMETEXT
>> Нужно "Порт N" увеличить на 40
>> Sed так не умеет, perl не ловит русские буквы. Подскажите решение задачи
> и перл и сед может. для начала сойдет awk & shell

как, например, awk&shell и sed? С перлом-то худо-бедно разобрался (см. выше)


"Замена по шаблону + мат.операция"
Отправлено Andrey Mitrofanov , 26-Июн-12 21:27 
> как, например, awk&shell и

$ echo "Коммутатор ABC - Порт 2 - Сеть SECURITY"|awk '$4=="Порт"{$5+=40}{print}'
Коммутатор ABC - Порт 42 - Сеть SECURITY
$ _