Substituindo string por outra string

0

Na linha (s) que se originam do arquivo csv)

14/Feb/2016:15:21:33-0500]http://map1.link.de/mk

qual é a parte mais fácil de substituir / excluir e adicionar

]http://map1.link.de/

com

,

tendo em mente que após map pode vir qualquer número map1, map2, map3

Exemplo de algumas linhas:

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

Resultado final

14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk
    
por newbie_girl 18.10.2016 / 19:08

2 respostas

0

Eu usaria sed :

sed 's/\(.*\)].*\/\(.*$\)/,/' csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk

Onde csv é este arquivo:

cat csv 
14/Feb/2016:15:21:33-0500]http://map1.link.de/mk
14/Feb/2016:16:21:33-0500]http://map5.link.de/mk


Explicação:% \(.*\)] = pesquisar e salvar todos os caracteres até o primeiro [
.*\/ = depois disso, pesquisar - não não salvar - tudo até o último /
\(.*$\) = salvar tudo depois disso até o final da linha ( mk )
, = substituir com o que salvamos e adicionar um vírgula entre

    
por 18.10.2016 / 19:17
0

Você pode expressar a sequência de um ou mais dígitos decimais POSIXly como [0-9]\{1,\} ou menos portável usando o operador de expressão regular estendida + as [0-9]+ so

sed 's@]http://map[0-9]\{1,\}\.link\.de/@,@' file.csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk

ou

sed -E 's@]http://map[0-9]+\.link\.de/@,@' file.csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk

Se você quiser substituir qualquer URI (não apenas aqueles cujo nome de host qualificado corresponde a map?.link.de ), você pode simplificar o último para

$ sed -E 's@]http://[^/]*/@,@' file.csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk
    
por 18.10.2016 / 19:30