문자열의 일련의 숫자를 표시할 수 있는 독립형 명령이나 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