una sustituir script reemplazar manejo linea insertar especiales espacios eliminar caracteres caracter cadenas cadena blanco aƱadir linux bash sed string-split

linux - sustituir - sed reemplazar/



Usar sed para dividir una cadena con un delimitador (6)

Tengo una cadena en el siguiente formato:

string1:string2:string3:string4:string5

Estoy tratando de usar sed para dividir la cadena : e imprimir cada subcadena en una nueva línea. Esto es lo que estoy haciendo:

cat ~/Desktop/myfile.txt | sed s/:///n/

Esto imprime:

string1 string2:string3:string4:string5

¿Cómo puedo hacer que se divida en cada delimitador?


Esto debería hacerlo:

cat ~/Desktop/myfile.txt | sed s/:///n/g


Esto podría funcionar para usted (GNU sed):

sed ''y/://n/'' file

o quizás:

sed y/:/$"/n"/ file


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

sed ''s/delimiter//n/g''

Por ejemplo, para dividir usando : como un delimitador:

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

En este caso particular, te perdiste la g después de la sustitución. Por lo tanto, se acaba de hacer 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 tiene que hacerse globalmente, es decir, para cualquier ocurrencia. Ver que el valor predeterminado es 1 y si pones por ejemplo 2, se hace 2 veces, etc.

En conjunto, en su caso necesitaría usar:

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

Tenga en cuenta que puede usar directamente la sintaxis del sed ... file lugar de la tubería innecesaria: cat file | sed cat file | sed


Si está utilizando gnu sed, puede usar /x0A para newline:

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


Usando simplemente tr :

$ tr '':'' $''/n'' <<< string1:string2:string3:string4:string5 string1 string2 string3 string4 string5

Si realmente necesitas sed :

$ sed ''s/://n/g'' <<< string1:string2:string3:string4:string5 string1 string2 string3 string4 string5


Usar /n in 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 todos modos, es el trabajo que se creó para hacer:

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