¿Qué comando puedo usar para dividir entradas como esta?
foo:bar:baz:quux
¿dentro de esto?
foo
bar
baz
quux
Estoy tratando de descifrar el cutcomando, pero parece que solo funciona con cantidades fijas de entrada, como "primeros 1000 caracteres" o "primeros 7 campos". Necesito trabajar con entradas arbitrariamente largas.
shell
text-processing
japreiss
fuente
fuente

tr : '\n' < input?Respuestas:
Hay algunas opciones:
tr : \\nsed 's/:/\n/g'awk '{ gsub(":", "\n") } 1'También puedes hacer esto en puro
bash:fuente
\nen cuenta que usar una cadena de reemplazo como esa funcionará en GNU sed, pero fallará en la mayoría de las otras implementaciones de sed.fuente
Si su grep lo admite
-o, puede hacerlo así:O con awk, configurando el separador de registros en
::O con corte GNU:
Editar
Como señala Chris a continuación, esto dejará una nueva línea final, esto se puede evitar si su awk admite la especificación
RScomo una expresión regular (probada con GNU awk):fuente
awkejemplo dejará una nueva línea final (probablemente no deseable).En algunas cadenas tuve problemas con las soluciones anteriores. Pero esto funcionó para mí:
fuente