각 문자가 별도의 줄에 있도록 단어의 문자를 분할하는 방법은 무엇입니까?
"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문자) 세 가지 모두 동일한 결과를 제공합니다.
답변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
$
주목할만한 차이점 중 하나는 접으면 출력에 빈 줄이 재생산된다는 것입니다.
$ 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
$