문자열에서 일련의 숫자를 표시하는 방법은 무엇입니까?

문자열에서 일련의 숫자를 표시하는 방법은 무엇입니까?

문자열의 일련의 숫자를 표시할 수 있는 독립형 명령이나 vi 또는 유사한 명령(gui일 수 있음)이 있습니까?

입력: 고양이가 상자 안으로 뛰어듭니다.

산출:

T h e   c a t   h o  p  p  e  d     i  n     a     b  o  x  .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

답변1

이는 하이브리드 Perl/Fold 접근 방식입니다.

$ echo "The cat hopped in a box." | fold -w 1 | 
     perl -lne 'push @k, "$_ "; push @l,sprintf "%-2s",$.; END{print "@k\n@l"}'
T  h  e     c  a  t     h  o  p  p  e  d     i  n     a     b  o  x  . 
1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

설명하다

  • fold -w 1: 입력 내용을 한 문자 너비로 접어서 각 입력 문자를 별도의 줄에 인쇄합니다.
  • perl -lne: 입력에서 후행 줄바꿈을 제거하고 -l각 호출에 줄바꿈을 추가합니다. 입력을 print한 줄씩 n읽고 e이에 대해 실행할 스크립트를 제공합니다.
  • push @k, " $_";: 현재 줄에 공백( )을 추가 $_하고 배열에 저장합니다 @k.
  • push @l,sprintf "%-2s",$.;: sprintf형식화된 문자열을 반환합니다. 여기서는 현재 줄 번호( )를 제공 $.하고 이를 인쇄하도록 지시하며 필요에 따라 공백을 추가하여 길이를 2로 만듭니다. 그런 다음 해당 문자열을 배열에 추가합니다 @l.
  • END{print "@k\n@l"}': 전체 파일을 읽은 후 두 개의 배열을 인쇄합니다.

문자 번호만 필요하고 여러 줄 출력에 신경 쓰지 않는다면 더 간단한 접근 방식은 다음과 같습니다(간결함을 위해 더 짧은 문자열 사용).

$ echo "foo bar" | fold -w1 | cat -n
 1  f
 2  o
 3  o
 4   
 5  b
 6  a
 7  r

답변2

셸과 기본 도구를 사용하면 매우 간단합니다.

$ echo "The cat hopped in a box." |
    (read a ; echo $a | sed 's/./&  /g' ; seq -ws" " 01 ${#a})
 T  h  e     c  a  t     h  o  p  p  e  d     i  n     a     b  o  x  .  
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

설명하다

문자열을 $a변수로 읽어 들입니다. ( )명령이 실행될 위치서브쉘$a, 변수에 액세스할 수 있도록 해야 합니다 . 그런 다음 sed각 문자를 자체 문자로 바꾸고 그 뒤에 공백 두 개를 붙여 전달합니다 . 마지막으로 이 seq명령은 에서 문자열 길이까지 채워진 숫자 목록을 인쇄합니다 0.01$a

답변3

zsh:

$ text='The cat hopped in a box.'
$ chars=(${(s::)text})
$ print -aC$#chars $chars {1..$#chars}
T   h   e       c   a   t       h   o   p   p   e   d       i   n       a       b   o   x   .
1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19  20  21  22  23  24

답변4

당신은 그것을 사용할 수 있습니다 perl:

$ echo The cat hopped in a box. | perl -nle '
    printf "%-3s", $_ for split //;
    printf "\n";
    printf "%-3s", $_ for 1..length'
T  h  e     c  a  t     h  o  p  p  e  d     i  n     a     b  o  x  .  
1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

관련 정보