Подскажите как на Перле или может ещё на чём в нужное место (т.к. в ЛОГ-файле все поля в одних и тех же местах) при условии, что слово наинается на 77 или 76 подставить в начало тройку,т.е. чтоб на выходе получить результат в том поле 377 или 376 ??Скрипт просто поиска по шаблону и замены не подходит, т.к. в других полях файла тоже может быть совпадение.
примерный алгаритм:
Если строка начианется с символа "N" и 18й символ имеет значение "7" а 19е "6", то
между 17м и 18м символом воткнуть символ "3" , чтоб при этом как при обычном форматировании текста в текстовом редакторе всё содержимое с права сдвинулось на право на один символ,таким образом, что вставленный символ "3" оказался на 18м месте.. и далее удалить пробел с 24го места.т.е. на входе:
N 115 00 T013028 76005 11/28 23:04 00:08:44
& 0000 0000 375434XXXXXXXXXXа на выходе должно быть так:
N 115 00 T013028 376005 11/28 23:04 00:08:44
& 0000 0000 375434XXXXXXXXXX
Для вывода на экранperl -p -e 'if( substr($_,17,2) =~ /7[67]/ ) { substr($_,23,1) = ""; substr($_,17,0)="3";}' /path/to/log
Для правка файла
perl -pi -e 'if( substr($_,17,2) =~ /7[67]/ ) { substr($_,23,1) = ""; substr($_,17,0)="3";}' /path/to/log
>Для вывода на экран
>
>perl -p -e 'if( substr($_,17,2) =~ /7[67]/ ) { substr($_,23,1) = "";
>substr($_,17,0)="3";}' /path/to/log
>
>Для правка файла
>
>perl -pi -e 'if( substr($_,17,2) =~ /7[67]/ ) { substr($_,23,1) = "";
>substr($_,17,0)="3";}' /path/to/logСпасибо, работает :)