Así que tengo el siguiente archivo:

Carlton 3053
Carlton North 3054
Docklands 3008
East Melbourne 3002
Flemington 3031
Kensington 3031
Melbourne 3000
Melbourne 3004
North Melbourne 3051
St Kilda East 3183

Quiero reemplazar el último espacio justo antes de los números con un guión, este es el más cercano que tengo

cat file.txt | sed -r 's/\ /\-/g'

Pero esto reemplaza todos los espacios de con –
Quiero que la salida a este aspecto:

Carlton-3053
Carlton North-3054
Docklands-3008
East Melbourne-3002
Flemington-3031
Kensington-3031
Melbourne-3000
Melbourne-3004
North Melbourne-3051
St Kilda East-3183

Alguna idea?

  • Tenga en cuenta que cuando usted quiere hacer sólo un reemplazo, /g no es necesario.
InformationsquelleAutor bk201 | 2014-04-04

5 Comentarios

  1. 7

    Lo que acerca de esto?

    $ sed -r 's/([^ ]*)$/-/' file
    Carlton-3053
    Carlton North-3054
    Docklands-3008
    East Melbourne-3002
    Flemington-3031
    Kensington-3031
    Melbourne-3000
    Melbourne-3004
    North Melbourne-3051
    St Kilda East-3183
    • ([^ ]*)$ capturas espacio + «cualquier cosa que no sea ser un espacio hasta el final de la línea».
    • -\1 de impresión guión + el apresado «cualquier cosa que no sea ser un espacio hasta el final de la línea».
  2. 7

    Sabes cómo reemplazar el primer espacio, ¿verdad?

    rev inputfile | sed 's//-/' | rev
    • «Es una locura, que sólo podría trabajar!»
  3. 5

    Su intento de cerrar. Simplemente es necesario capturar todo antes de que el espacio y necesitaba una barra diagonal inversa de referencia en la sustitución. No sé por qué se escapó el espacio y el guión, aunque.

    sed -r 's/(.*) /-/g' inputfile

    Para su entrada, se produce:

    Carlton-3053
    Carlton North-3054
    Docklands-3008
    East Melbourne-3002
    Flemington-3031
    Kensington-3031
    Melbourne-3000
    Melbourne-3004
    North Melbourne-3051
    St Kilda East-3183
  4. 3

    Aquí es un awk variación:

    awk '{$NF="-"$NF;sub(/-/,"-")}1' file
    Carlton-3053
    Carlton North-3054
    Docklands-3008
    East Melbourne-3002
    Flemington-3031
    Kensington-3031
    Melbourne-3000
    Melbourne-3004
    North Melbourne-3051
    St Kilda East-3183
  5. 0

    El siguiente también funciona en OSX desde sed -r no está disponible allí:

    sed 's/\(.*\) /-/' file_containing_your_text.txt

Dejar respuesta

Please enter your comment!
Please enter your name here