各文字が別々の行になるように単語の文字を分割する方法は?
"StackOver"
たとえば、見たいとしましょう。
S
t
a
c
k
O
v
e
r
私はbashに初めて触れてどこから始めるべきかわかりません。
答え1
私は以下を使用しますgrep
:
$ grep -o . <<<"StackOver"
S
t
a
c
k
O
v
e
r
またはsed
:
$ sed 's/./&\n/g' <<<"StackOver"
S
t
a
c
k
O
v
e
r
末尾のスペースが問題の場合:
sed 's/\B/&\n/g' <<<"StackOver"
これらはすべてGNU / Linuxを想定しています。
答え2
テキストを垂直に印刷する場合は、文字ではなく文字小数クラスターで中断することをお勧めします。たとえば、e
鋭いアクセントのあるaは次のようになります。
レタークラスター(
e
そして鋭いアクセントは一つ磁素クラスタ):$ perl -CLAS -le 'for (@ARGV) {print for /\X/g}' $'Ste\u301phane' S t é p h a n e
(または
grep -Po '\X'
PCREサポートでGNU grepを使用してください)文字の使用(ここではGNU
grep
):$ printf '%s\n' $'Ste\u301phane' | grep -o . S t e p h a n e
fold
文字単位で分割することを目指していますが、GNUはfold
マルチバイト文字をサポートしていないため、バイト単位で分割します。$ printf '%s\n' $'Ste\u301phane' | fold -w 1 S t e � � p h a n e
存在するスタックオーバーフローASCII文字のみで構成される(つまり、1文字あたり1バイト、文字列クラスタごとに1文字)、3つすべてが同じ結果を提供します。
答え3
お持ちの場合パール6箱の中:
$ perl6 -e 'for @*ARGS -> $w { .say for $w.comb }' 'cường'
c
ư
ờ
n
g
あなたの地域に関係なく動作します。
答え4
あなたはそれを使用することができますfold (1)
注文する。grep
そしてより効率的ですsed
。
$ time grep -o . <bigfile >/dev/null
real 0m3.868s
user 0m3.784s
sys 0m0.056s
$ time fold -b1 <bigfile >/dev/null
real 0m0.555s
user 0m0.528s
sys 0m0.016s
$
注目すべき違いの1つは、折りたたむと出力に空白行が再現されることです。
$ grep -o . <(printf "A\nB\n\nC\n\n\nD\n")
A
B
C
D
$ fold -b1 <(printf "A\nB\n\nC\n\n\nD\n")
A
B
C
D
$