Como reescrever linhas no arquivo? [duplicado]

0

No arquivo csv, algumas linhas não se ajustam aos dados de que preciso. Por exemplo, este é o meu arquivo example.csv:

14/Feb/2016:13:21:33-0500,mk
15/Feb/2016:14:21:33-0500,mk
16/Feb/2016:15:21:33-0500]http://map1.link.de/mk
17/Feb/2016:16:21:33-0500]http://map5.link.de/mk

Eu posso buscar essas linhas e corrigi-las com:

$ cat example.csv | grep "map" | sed 's/\(.*\)].*\/\(.*$\)/,/'

Resultado:

16/Feb/2016:15:21:33-0500,mk
17/Feb/2016:16:21:33-0500,mk

Mas o que eu realmente quero é corrigi-los e salvá-los assim no mesmo arquivo. Como posso fazer isso?

    
por newbie_girl 18.10.2016 / 21:11

1 resposta

1

Se você estiver usando o GNU Sed, apenas execute:

sed -i '/map/s/\(.*\)].*\/\(.*$\)/,/' example.csv

Aviso: Isso substituirá o conteúdo do arquivo. Faça uma cópia primeiro se você não tiver certeza de que o regex é exatamente o que você quer.

Se você não tiver o GNU Sed, ou você quer apenas uma solução mais portátil que será executada em qualquer sistema POSIX, use ex :

Para uma avaliação, sem editar o arquivo:

printf '%s\n' 'g/map/s/\].*\/\([^/]*\)$/,/' %p | ex example.csv

Para salvar as alterações quando você estiver satisfeito com o resultado:

printf '%s\n' 'g/map/s/\].*\/\([^/]*\)$/,/' x | ex example.csv
    
por 18.10.2016 / 21:16