%20en%20un%20archivo%20de%20texto%20despu%C3%A9s%20de%20un%20patr%C3%B3n%20de%20caracteres%20(incluido%20el%20patr%C3%B3n)%3F.png)
Básicamente necesito lo que obtuvo el OP de esta pregunta pero no quería. ¿Cómo eliminar todo después de un patrón determinado o una cadena en un archivo?
Entonces obtuve datos como:
Something and something ........................... 23
Another one .......................................123
Somethingelse Inc. .................................243
Entonces, lo que quiero es eliminar todos los puntos (y los números) después del espacio.
Hasta ahora, intenté usar el comando del OP allí, pero no funcionó como esperaba porque borra todo después del primer punto que encuentra. Lo que significa que el punto en los datos del tipo Somethinelse Inc. también se elimina.
Intenté hacer que la primera respuesta (sed) de esa pregunta funcionara reemplazando el primer .com con tres puntos y el segundo con un espacio vacío, pero fallé. Esta vez se elimina todo lo que sigue al primer espacio o quedan tres puntos.
La segunda respuesta (ex -sc ...) funcionó como quería el OP, pero me deja algunos puntos, así que tampoco tuve suerte.
También intenté modificar el comando de esta respuesta pero tampoco lo logré.¿Cómo puedo eliminar todo hasta un patrón y todo lo que sigue a otro patrón de una línea?
Respuesta1
sed 's/ \.\..*$//' /path/to/file
Deberia trabajar:
\.\. - A space followed by two literal periods
.* - One or characters of any type
$ - End of line
Respuesta2
Otra solución poco elegante podría ser:
cat path/to/yourfile | sed -E "s/[\.]{2,}//g" | sed "s/[0-9]//g" > path/to/new_file
dónde:
-E
Interpretar expresiones regulares como expresiones regulares extendidas (modernas)[\.]{2,}
hacer coincidir un punto cada dos o más apariciones[0-9]
coincidir con todos los dígitoss/expr//g
significa sustituto combinadoexpr
con nada tanto como puedas (g)
Respuesta3
Qué tal esto:
sed 's/\.\+ *[[:digit:]]\+[[:space:]]*$//g'
lo que significa:
uno+a+muchos(\+)puntos(\.)Y cero a muchos(*)espacios( )Y uno+a+muchos(\+) dígitos([[:dígito:]])Y por si acaso alguna(*) espacio en blanco ([[:espacio:]])Y Fin de esta línea ($)
Probado con (tenga en cuenta que inserté "...234" en la segunda fila y tabuladores/espacios al final):
Something and something ........................... 23<Tab>
An ...234 other one .......................................123<space>
Somethingelse Inc. .................................243<some spaces>
Y el resultado:
xb@dnxb:/tmp$ sed 's/\.\+ *[[:digit:]]\+[[:space:]]*$//g' sample.txt
Something and something
An ...234 other one
Somethingelse Inc.
xb@dnxb:/tmp$