Cámbialo todo pero, a la primera, ni la toques


como hacer cambios en varios ficheros desde la terminal de comandosSuele ocurrir que, cuando tenemos una lista de elementos en las que se desea realizar una sustitución de caracteres, no interese modificar la primera ocurrencia y deseemos dejarla intacta.

El otro día necesitaba hacerlo utilizando el comando sed y, como me costó un rato averiguar cómo se hace aquí os dejo la solución y un ejemplo.

Espero os sea de utilidad 😉

Imagina que tienes la siguiente cadena de texto (la he obtenido preguntando por los grupos a los que pertenece determinado usuario y aplicando el comando cut para quedarme sólo con los grupos ignorando el nombre del usuario)

jasvazquez adm cdrom sudo dip plugdev lpadmin sambashare

Que quiero utilizar directamente con el comando useradd (requiere que se utilice la coma para separar los grupos en lugar del espacio en blanco) sin tener que escribir varias líneas en la terminal.

PROBLEMA: hay un espacio justo delante de jasvazquez que no me interesa sustituir por una coma puesto que daría error y no quiero concatenar varios comandos sed (enrevesado que es uno 😉 )

La solución pasa por modificar levemente la expresión (observa el 2 delante de la habitual)

sed 's/ /,/2g'

Con ésto le estamos indicando que cambie a partir de la segunda ocurrencia (sírvete cambiarlo por un 3, 4, … según las ocurrencias que te gustaría «perdonar»)

El ejemplo completo que he utilizado sería

groups jasvazquez | cut -d: -f2 | sed 's/ /,/2g'

y el resultado el que puedes observar en la siguiente captura

sustituir cadena en fichero de texto

Y tú…

  • ¿Conocías esta posibilidad?
  • ¿Eres de copiar el resultado en un editor de textos y aplicar un buscar/reemplazar o de cambiar manualmente los espacios por comas en la misma línea de comandos? 😉

8 comentarios en “Cámbialo todo pero, a la primera, ni la toques

  1. Ole soy el primero que lee este post 😉 y espero no ser el último.

    Un abrazo, amigo para que no te sientas tan solo en verano.

    P.D.: Si quieres spam te puedo vender un jamón o un chorizo (muy buenos, eso sí)

    Me gusta

    1. Leerlo no creo pero desde luego que eres el que ha abierto el fuego de los comentarios y se te agradece Teodo 😉

      Como beneficio de haber sido el primero, el contar con una de las posiciones más codiciadas por aquellos que quieren visibilidad para sus blogs y/o webs (lástima que no incluyeses enlace a artículo relacionado y/o de interés 😛 )

      Me gusta

  2. Con relación a este post te diré que yo soy muy de textos gnosticos y de San Juan de la Cruz, pero este nivel … Acojonante, claro estamos en temporada alta.
    Un saludo, campeon!

    Me gusta

    1. Pues ya tenemos algo en común aunque siempre me he decantado por Santa Teresa y sus «yemas» 😛

      Respecto al nivel, has dado en el «clavo» (toma estigma pro beatificación), he aprovechado que no me lee ni Dios para colar un artículo técnico 😉

      Me gusta

  3. Gracias, me lo apunto. Otra forma de hacer lo mismo sería:

    $ groups jasvazquez | sed ‘s/ /,/g’ | cut -d, -f3-

    De esta forma eliminas el espacio del principio.

    Un saludo.

    Me gusta

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.