Substituir barra “/” em um arquivo

0

Estou usando o editor vi , tenho dados como este em um arquivo.

05/08/2017,U,01,116326001 
05/08/2017,U,01,116226001 
05/08/2017,U,01,116726323 
05/08/2017,U,01,116236001

Eu quero substituir a data (1ª coluna).

Ex: 05/08/2017 a 04/03/2017 .

Obrigado antecipadamente.

    
por Arun Thilak 30.08.2017 / 14:24

3 respostas

4

Dentro do Vi (ou Vim):

:%s#^05/08/2017#04/03/2017#

Você pode ter que pressionar Esc primeiro para sair do modo de inserção.

Assim como em sed , você pode escolher um caractere arbitrário como o delimitador de padrão ao substituir usando o comando s . Aqui eu escolhi # .

O padrão, ^05/08/2017 , corresponderá no início da linha devido ao ^ . Isso impede que ele seja correspondido acidentalmente em qualquer outra linha.

Com o habitual delimitador de padrão / as, obtemos um bom exemplo do que é chamado de " a síndrome do paliteiro inclinado ":

:%s/^05\/08\/2017/04\/03\/2017/

O comando de substituição será executado em todas as linhas no buffer Vi atual, pois usamos % no início para o "intervalo" ( % é idêntico a 1,$ , ou seja, "da primeira linha até a última linha ").

    
por 30.08.2017 / 14:32
1

Simplesmente com a ferramenta sed :

sed -i 's~^[0-9]*/[0-9]*~04/03~' file
  • -i option, para modificar o arquivo no local

O conteúdo de file após o processamento:

04/03/2017,U,01,116326001 
04/03/2017,U,01,116226001 
04/03/2017,U,01,116726323 
04/03/2017,U,01,116236001
    
por 30.08.2017 / 14:26
0

Opção Awk:

awk -F, '{ printf "%s","04/03/2017";for (i=2;i<=NF;i++) {printf ",%s",$i } }' filename

Imprima a data desejada e, em seguida, percorra e imprima os campos restantes separados por

    
por 30.08.2017 / 14:50