web-dev-qa-db-fra.com

Split Long Line sur un délimiteur

Quelle commande puis-je utiliser pour diviser entrée comme ceci:

foo:bar:baz:quux

dans ça?

foo
bar
baz
quux

J'essaie de comprendre la commande cut, mais il semble fonctionner uniquement avec des quantités fixes d'entrée, telles que "1000 premiers caractères" ou "premiers 7 champs". Je dois travailler avec une entrée arbitraire longue.

21
japreiss

Il y a quelques options:

  • tr : \\n
  • sed 's/:/\n/g' (Avec GNU SED)
  • awk '{ gsub(":", "\n") } 1'

Vous pouvez également faire cela dans Pure bash:

while IFS=: read -ra line; do
    printf '%s\n' "${line[@]}"
done
35
Chris Down
$ line=foo:bar:baz:quux
$ words=$(IFS=:; set -- $line; printf "%s\n" "$@")
$ echo "$words"
foo
bar
baz
quux
4
glenn jackman