¿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 cut
comando, 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 : \\n
sed 's/:/\n/g'
awk '{ gsub(":", "\n") } 1'
También puedes hacer esto en puro
bash
:fuente
\n
en 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
RS
como una expresión regular (probada con GNU awk):fuente
awk
ejemplo dejará una nueva línea final (probablemente no deseable).En algunas cadenas tuve problemas con las soluciones anteriores. Pero esto funcionó para mí:
fuente