GNU/Linux >> Tutoriales Linux >  >> Linux

Usando sed para dividir una cadena con un delimitador

Para dividir una cadena con un delimitador con GNU sed, diga:

sed 's/delimiter/\n/g'     # GNU sed

Por ejemplo, para dividir usando : como delimitador:

$ sed 's/:/\n/g' <<< "he:llo:you"
he
llo
you

O con un sed que no sea GNU:

$ sed $'s/:/\\\n/g' <<< "he:llo:you"
he
llo
you

En este caso particular, te perdiste el g después de la sustitución. Por lo tanto, solo se hace una vez. Ver:

$ echo "string1:string2:string3:string4:string5" | sed s/:/\\n/g
string1
string2
string3
string4
string5

g significa g lobal y significa que la sustitución se tiene que hacer globalmente, es decir, para cualquier ocurrencia. Mira que por defecto es 1 y si pones por ejemplo 2 se hace 2 veces, etc.

En total, en su caso necesitaría usar:

sed 's/:/\\n/g' ~/Desktop/myfile.txt

Tenga en cuenta que puede usar directamente el sed ... file sintaxis, en lugar de tuberías innecesarias:cat file | sed .


Usando \n en sed no es portátil. La forma portátil de hacer lo que quieras con sed es:

sed 's/:/\
/g' ~/Desktop/myfile.txt

pero en realidad este no es un trabajo para sed de todos modos, es el trabajo tr fue creado para hacer:

tr ':' '
' < ~/Desktop/myfile.txt

Linux
  1. Usando múltiples patrones a la vez con el comando Sed

  2. ¿Eliminar todos los comentarios de C con Sed?

  3. ¿Usando una referencia a una variable de cadena Bash en Sed?

  4. ¿Usando Sed con caracteres especiales?

  5. ¿Usando Word Wrap con Mc?

Sustitución de cadena en Bash

¿Dividir caracteres individuales usando la cadena nula?

¿Reemplazo de cadenas usando un diccionario?

Cómo dividir una cadena en Bash Script

Usando grep y sed para encontrar y reemplazar una cadena

Problema al usar xargs --max-args --replace con delimitador predeterminado