Quelle commande puis-je utiliser pour diviser une entrée comme celle-ci:
foo:bar:baz:quux
en cela?
foo
bar
baz
quux
J'essaie de comprendre la cut
commande, mais elle ne semble fonctionner qu'avec des quantités fixes d'entrée, comme "1000 premiers caractères" ou "7 premiers champs". Je dois travailler avec une entrée arbitrairement longue.
shell
text-processing
japreiss
la source
la source
tr : '\n' < input
?Réponses:
Il y a quelques options:
tr : \\n
sed 's/:/\n/g'
awk '{ gsub(":", "\n") } 1'
Vous pouvez également le faire en pur
bash
:la source
\n
de la chaîne de remplacement comme celle-ci fonctionnera dans GNU sed, mais échouera dans la plupart des autres implémentations sed.la source
Si votre grep le supporte,
-o
vous pouvez le faire comme ceci:Ou avec awk, définissez le séparateur d'enregistrement sur
:
:Ou avec GNU cut:
modifier
Comme indiqué par Chris ci-dessous, cela laissera une nouvelle ligne de fin, cela peut être évité si votre awk prend en charge la spécification en
RS
tant qu'expression régulière (testé avec GNU awk):la source
awk
exemple laissera une nouvelle ligne (probablement indésirable) à la fin.Dans certaines chaînes, j'ai eu des problèmes avec les solutions ci-dessus. Mais cela a fonctionné pour moi:
la source