localize e substitua uma string em um arquivo sem usar o arquivo temporário com o SED

3

Eu tenho um arquivo de texto chamado sample.text que se parece com isso

Continent Lat/Lon: 46.07305 / -100.546
Country Lat/Lon: 38 / -98
City Lat/Lon:(37.3845) / (-122.0881)

Eu quero processar este texto para obter a saída como segue sem usar o arquivo temporário

Continent Lat/Lon: 46.07305 / -100.546
Country Lat/Lon: 38 / -98
City Latitude: (37.3845) 
City Longitude: (-122.0881)

Eu não tenho controle sobre os valores de latitude / longitude.

Eu consegui isso usando 2 scripts awk

BEGIN { FS=":"}  {print $2} | BEGIN { FS="/"}  {printf "City Latitude:%s\nCity Longitude:%s\n",$1,$2} 

Como eu quero escrever o arquivo original, existe alguma maneira de fazer isso usando

sed -i  

Todas as entradas são apreciadas.

    
por Swatesh Pakhare 25.03.2016 / 05:48

1 resposta

2

sed -i 's,^City Lat/Lon:(\(.*\)) / (\(.*\))$,City Latitude: ()\nCity Longitude: (),' /path/to/file

Explicação

  • sed -i 's,foo,bar,' /path/to/file : do sed inplace, substituindo foo por bar . N.B. Eu uso , como delimitadores aqui em vez de / , para que eu possa usar / na string sem ter que escapar deles.
  • ^City Lat/Lon:(\(.*\)) / (\(.*\))$ : encontre qualquer ocorrência desse regex, onde ^ e $ são o início e o fim da linha, respectivamente, e cada um dos dois \(.*\) representa um grupo de captura.
  • City Latitude: ()\nCity Longitude: () : substitua por essa string, em que e representam os grupos capturados da primeira expressão e \n é uma nova linha.
por 25.03.2016 / 06:34