Como substituir certas strings?

0

Exemplo do meu arquivo de texto:

03/Oct/2016:06:39:50-0500,cd/base/0/48/2.png,206,1514
03/Oct/2016:06:39:50-0500,cd/base/1/46/3.png,206,5796
03/Oct/2016:06:39:50-0500,cd/base/2/45/4.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/3/46/78.png,200,7208
03/Oct/2016:06:39:50-0500,cd/base/4/45/43.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/5/46/8.png,200,7208
...

Neste texto, devo substituir o número após base/ seguindo estas regras:

if that_number=0 then that_number=5
if that_number=1 then that_number=6
if that_number=2 then that_number=7
if that_number=3 then that_number=8
if that_number=4 then that_number=9
if that_number=5 then that_number=10

Resultado desejado:

03/Oct/2016:06:39:50-0500,cd/base/5/48/2.png,206,1514
03/Oct/2016:06:39:50-0500,cd/base/6/46/3.png,206,5796
03/Oct/2016:06:39:50-0500,cd/base/7/45/4.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/8/46/78.png,200,7208
03/Oct/2016:06:39:50-0500,cd/base/9/45/43.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/10/46/8.png,200,7208

Alguma ideia de como posso fazer isso?

    
por newbie_girl 24.10.2016 / 22:25

3 respostas

0

sed funcionaria:

sed \
    -e 's/base\/1/base\/6/' \
    -e 's/base\/2/base\/7/' \
    -e 's/base\/3/base\/8/' \
    -e 's/base\/4/base\/9/' \
    -e 's/base\/5/base\/10/' \
    -e 's/base\/0/base\/5/'

Eu acho que você tem que colocar o caso "base / 0" por último, caso contrário, o 5 - > 10 caso entra em ação também.

    
por 24.10.2016 / 22:38
4

No Perl, é fácil corresponder ao contexto e fazer a adição:

perl -pe 's,base/\K\d+,$& + 5,e' input_file

Combinamos qualquer coisa do formulário base/<numbers> , esquecemos a primeira parte (até o \K ) e substituímos o resto pelo que foi correspondido ( $& ) mais 5. e faz a substituição Expressão Perl, em vez de apenas uma string.

    
por 24.10.2016 / 23:40
3

awk pode fazer uso do fato de que é uma operação +5 em cada número:

awk -F'/' '{$5+=5 ; print}' OFS='/' input_file

Ao usar / como delimitador para entrada ( -F'/' ) e saída ( OFS='/') , respectivamente, 5 precisa ser adicionado ao campo número 5.

Note que as posições e números das barras são cruciais aqui.

    
por 24.10.2016 / 23:36