a c*_*der 4 string utilities text-processing
是否有独立或在 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
Run Code Online (Sandbox Code Playgroud)
这是一种混合 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
使用 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
Run Code Online (Sandbox Code Playgroud)
字符串被读入$a
变量。该( )
会在里面运行它们的命令的子shell,进行所需的$a
变量访问。然后传递给sed
which 将每个字符替换为自身后跟两个空格。最后,该seq
命令打印0
从01
到$a
字符串长度的填充数字列表。
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
444 次 |
最近记录: |