文字列の一連の数字を表示できるスタンドアロンコマンドまたは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
:入力内容を1文字幅に折りたたみ、各入力文字を別々の行に印刷します。perl -lne
:入力から末尾の改行を削除し、-l
各呼び出しに改行を追加します。入力をprint
1行ずつn
読み、e
それに対して実行するスクリプトを提供します。push @k, " $_";
:現在の行にスペース()を追加し$_
て配列に保存します@k
。push @l,sprintf "%-2s",$.;
:sprintf
フォーマットされた文字列を返します。ここでは、現在の行番号()を指定して$.
印刷するように指示し、必要に応じてスペースを追加して長さを2にします。次に、その文字列を配列に追加します@l
。END{print "@k\n@l"}'
:ファイル全体を読み込んだ後、2つの配列を印刷します。
文字番号だけが必要で、複数行の出力に気を使わない場合は、より簡単なアプローチは次のとおりです(簡潔にするために短い文字列を使用)。
$ 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
各文字を独自の文字に置き換え、その後にスペースを2つ付けて渡します。最後に、この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