Command-Line

Bash腳本:在每個字母上拆分單詞

  • June 15, 2021

如何拆分單詞的字母,每個字母在單獨的行中?

例如,鑑於"StackOver" 我想看到

S
t
a
c
k
O
v
e
r

我是 bash 新手,所以我不知道從哪裡開始。

我會使用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。

如果目的是垂直列印文本,您可能希望打破字素群而不是字元。例如帶有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旨在打破字元,但 GNUfold不支持多字節字元,因此它改為打破字節:
$ printf '%s\n' $'Ste\u301phane' | fold -w 1
S
t
e
�
�
p
h
a
n
e

在僅由 ASCII 字元組成的StackOver上(因此每個字元一個字節,每個字素群一個字元),所有三個都會給出相同的結果。

引用自:https://unix.stackexchange.com/questions/253279