Que comando posso usar para dividir entradas como esta:
foo:bar:baz:quux
nisso?
foo
bar
baz
quux
Estou tentando descobrir o cut
comando, mas parece funcionar apenas com quantidades fixas de entrada, como "primeiros 1000 caracteres" ou "primeiros 7 campos". Eu preciso trabalhar com entradas arbitrariamente longas.
shell
text-processing
japreiss
fonte
fonte
tr : '\n' < input
?Respostas:
Existem algumas opções:
tr : \\n
sed 's/:/\n/g'
awk '{ gsub(":", "\n") } 1'
Você também pode fazer isso de maneira pura
bash
:fonte
\n
na cadeia de substituição como essa funcionará no GNU sed, mas falhará na maioria das outras implementações do sed.fonte
Se o seu grep suportar,
-o
você pode fazer o seguinte:Ou com o awk, configurando o separador de registros para
:
:Ou com o corte GNU:
Editar
Conforme observado por Chris abaixo, isso deixará uma nova linha à direita; isso poderá ser evitado se o seu awk suportar a especificação
RS
como uma expressão regular (testada com o GNU awk):fonte
awk
exemplo deixará uma nova linha (provavelmente indesejável) à direita.Em algumas strings, tive problemas com as soluções acima. Mas isso funcionou para mim:
fonte