как заменить конкретное поле в файле - PullRequest
0 голосов
/ 01 сентября 2010

В файле:

"name": "test","Address": "UK" "currency": "£" no:121212 ,
"name": "test1","Address": "UK" "currency": "£" no:12123212 ,
"name": "test2","Address": "UK" "currency": "£" no:121223212 ,
"name": "test3","Address": "UK" "currency": "£" no:121223212 ,
"name": "test4","Address": "UK" "currency": "£" no:121223212 ,

Я хочу заменить все нет в *

"name": "test","Address": "UK" "currency": "£" no:***** ,
"name": "test1","Address": "UK" "currency": "£" no:***** ,
"name": "test2","Address": "UK" "currency": "£" no:***** ,
"name": "test3","Address": "UK" "currency": "£" no:***** ,
"name": "test4","Address": "UK" "currency": "£" no:***** ,

и хочу добавить обратно в файл

Ответы [ 4 ]

3 голосов
/ 01 сентября 2010

Этот однострочник должен сделать это:

 perl -i.bak -pe 's/(?<=no:)\d+/****/' filename
3 голосов
/ 01 сентября 2010
$ perl -pe 's/no:\d+/no:*****/' < input_file > output_file
1 голос
/ 01 сентября 2010

У меня может возникнуть желание использовать File :: Map для изменения файла на месте. Однако, если я сделаю это, мне придется заменить цифры один на один, так как это не переместит другие символы в файле:

use File::Map qw(map_file);

map_file my $map, 'test.txt', '+<';
$map =~ s/(?<=no:)(\d+)(?=\s*,$)/ '*' x length $1 /meg;
1 голос
/ 01 сентября 2010
cat input | perl -lne 's/^(.+)no:(\d+)(.*)/print"$1no:","*" x length($2),"$3"/e' > output
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...