如何显示字符串的数字字符序列?

如何显示字符串的数字字符序列?

是否有一个独立的命令或 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

使用 shell 和基本工具非常简单:

$ 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

相关内容