Wie kann ich die Buchstaben eines Wortes so aufteilen, dass jeder Buchstabe in einer eigenen Zeile steht?
Zum Beispiel "StackOver"
würde ich gerne sehen
S
t
a
c
k
O
v
e
r
Ich bin neu im Bashing, also habe ich keine Ahnung, wo ich anfangen soll.
command-line
split
words
Sijaan Hallak
quelle
quelle
Here string
Modo-Äquivalent vonecho foo | ...
nur weniger Tippen. Siehe tldp.org/LDP/abs/html/x17837.html.
auf\B
(stimmt nicht mit der Wortgrenze überein).sed
wie fallen lassen:sed -et -e's/./\n&/g;//D'
Möglicherweise möchten Sie anstelle von Zeichen in Graphem-Clustern unterbrechen, wenn der Text vertikal gedruckt werden soll. Zum Beispiel mit einem
e
mit einem akuten Akzent:Mit Graphemclustern (
e
mit seinem akuten Akzent wäre dies ein Graphemcluster):(oder
grep -Po '\X'
mit GNU grep, das mit PCRE-Unterstützung erstellt wurde)Mit Zeichen (hier mit GNU
grep
):fold
soll Zeichen unterbrechen, aber GNUfold
unterstützt keine Mehrbyte-Zeichen, so dass es stattdessen auf Bytes unterbricht:Bei StackOver, das nur aus ASCII-Zeichen besteht (also ein Byte pro Zeichen, ein Zeichen pro Graphemcluster), führen alle drei zu demselben Ergebnis.
quelle
grep -Po
dass ich nicht das tue, was man erwarten würde (wie es dergrep -P
Fall ist).grep -Po .
Findet Zeichen (und ein kombinierter Akzent nach einem Newline-Zeichen ist ungültig) undgrep -Po '\X'
findet Graphem-Cluster für mich. Möglicherweise benötigen Sie eine aktuelle Version von grep und / oder PCRE, um ordnungsgemäß zu funktionieren (oder es zu versuchengrep -Po '(*UTF8)\X'
)Wenn Sie perl6 in Ihrer Box haben:
arbeiten unabhängig von Ihrem Gebietsschema.
quelle
Mit vielen
awk
Versionenquelle
awk -v FS='' -v OFS='\n' '{$1=$1};1'
(fragen , ob das mehr tragbar ist , da-F ''
die ERE ergeben könnte://
)Das Folgende wird allgemeiner Natur sein:
quelle
quelle
Da Sie in bash ausdrücklich um eine Antwort gebeten haben, haben Sie hier eine Möglichkeit, dies in reiner bash zu tun:
Beachten Sie, dass dies die neue Zeile am Ende des " Hier-Dokuments " einfängt . Wenn Sie dies vermeiden möchten, die Zeichen jedoch weiterhin mit einer Bash-Schleife
printf
durchlaufen , verwenden Sie , um die Zeilenumbrüche zu vermeiden.quelle
Auch Python 2 kann über die Befehlszeile verwendet werden:
oder:
oder (wie von 1_CR kommentiert) mit Python 3 :
quelle
Sie können den
fold (1)
Befehl verwenden. Es ist effizienter alsgrep
undsed
.Ein wesentlicher Unterschied besteht darin, dass beim Falten leere Zeilen in der Ausgabe wiedergegeben werden:
quelle
Sie können Multibyte-Zeichen wie folgt verarbeiten:
Dies kann sehr praktisch sein, wenn Sie mit Live- Eingaben arbeiten, da dort keine Pufferung erfolgt und ein Zeichen gedruckt wird, sobald es vollständig ist .
quelle
sed
sind Skripte gedacht . Ich werde im Moment wahrscheinlich nicht darüber schreiben - ich bin ziemlich müde. Es ist jedoch sehr nützlich, wenn Sie ein Terminal lesen.dd
Multibyte-Zeichen unterbrochen werden, sodass die Ausgabe kein Text mehr ist und das Verhalten von sed gemäß POSIX nicht spezifiziert wird.Sie können auch Wortgrenzen verwenden.
quelle
In der Bash:
Dies funktioniert mit jedem Text und nur mit Bash-Interna (kein externes Hilfsprogramm). Daher sollte es bei sehr kurzen Zeichenfolgen schnell sein.
Ausgabe:
Wenn es in Ordnung ist, IFS zu ändern und die Positionsparameter zu ändern, können Sie auch den Sub-Shell-Aufruf vermeiden:
quelle
Updates gibt es hier auf die abgefahrenste | schnellste | pureBashBased-Art!
für mehr awesomeness
quelle
fold -b1
?Dadurch wird Ihr Wort aufgeteilt und in einem Array gespeichert
var
.quelle
quelle