배쉬 스크립트 : 각 문자의 단어 분리 들어 “StackOver” 보고 싶은 경우 S t a c k O v e r 나는

각 글자를 별도의 줄로 나누는 방법은 무엇입니까?

예를 들어 "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은 문자를 구분하기위한 것이지만 GNU fold는 멀티 바이트 문자를 지원하지 않으므로 대신 바이트를 구분합니다.

    $ printf '%s\n' $'Ste\u301phane' | fold -w 1
    S
    t
    e
    �
    �
    p
    h
    a
    n
    e
    

StackOver ASCII 문자로 구성 (문자 당 한 바이트, 그래 핀 클러스터 당 하나 개의 문자 때문에), 세 가지 모두 같은 결과를 줄 것이다.


답변

상자에 perl6이 있는 경우 :

$ perl6 -e 'for @*ARGS -> $w { .say for $w.comb }' 'cường'
c
ư
ờ
n
g

로케일에 관계없이 작업하십시오.


답변

많은 awk버전으로

awk -F '' -v OFS='\n' '{$1=$1};1' <<<'StackOver'

답변

아래는 일반적인 것입니다 :

$ awk -F '' \
   'BEGIN { RS = ""; OFS = "\n"} {for (i=1;i<=NF;i++) $i = $i; print }' <file_name>

답변

echo StackOver | sed -e 's/./&\n/g'
S
t
a
c
k
O
v
e
r

답변

bash에서 답변을 구체적으로 요청했기 때문에 다음을 순수 bash에서 수행하는 방법이 있습니다.

while read -rn1; do echo "$REPLY" ; done <<< "StackOver"

이것은 ” here document ” 의 끝에 줄 바꿈 문자를 붙 입니다. 이를 피하고 bash 루프를 사용하여 문자를 계속 반복 printf하려면 줄 바꿈을 피하십시오.

printf StackOver | while read -rn1; do echo "$REPLY" ; done