Welchen Befehl kann ich verwenden, um die Eingabe wie folgt zu teilen:
foo:bar:baz:quux
das mögen?
foo
bar
baz
quux
Ich versuche, den cut
Befehl herauszufinden, aber er scheint nur mit festen Eingabemengen zu funktionieren, wie "ersten 1000 Zeichen" oder "ersten 7 Feldern". Ich muss mit beliebig langen Eingaben arbeiten.
shell
text-processing
japreiss
quelle
quelle
tr : '\n' < input
?Antworten:
Es gibt einige Möglichkeiten:
tr : \\n
sed 's/:/\n/g'
awk '{ gsub(":", "\n") } 1'
Sie können dies auch in reinem tun
bash
:quelle
\n
dieser Ersatzzeichenfolge in GNU sed funktioniert, in den meisten anderen sed-Implementierungen jedoch fehlschlägt.quelle
Wenn dein grep dies unterstützt
-o
, kannst du es so machen:Oder setzen Sie mit awk das Datensatztrennzeichen auf
:
:Oder mit GNU-Schnitt:
Bearbeiten
Wie von Chris unten bemerkt, hinterlässt dies eine neue Zeile. Dies kann vermieden werden, wenn Ihre awk die Angabe
RS
eines regulären Ausdrucks unterstützt (getestet mit GNU awk):quelle
awk
Beispiel hinterlässt eine (wahrscheinlich unerwünschte) nachgestellte Zeile.Bei einigen Saiten hatte ich Probleme mit den obigen Lösungen. Aber das hat bei mir geklappt:
quelle