Perl 如何在shell中创建从A到Z的字母列表并遍历它们?
假设我想在cshshell中从字母A迭代到字母Z。我如何简洁地做到这一点 在bash中,我会做类似的事情Perl 如何在shell中创建从A到Z的字母列表并遍历它们?,perl,unix,shell,awk,csh,Perl,Unix,Shell,Awk,Csh,假设我想在cshshell中从字母A迭代到字母Z。我如何简洁地做到这一点 在bash中,我会做类似的事情 for i in 'A B C ...Z'; do echo $i; done 重点是我不想写A到Z,我想要类似的东西 [A-Z] 您能用AWK或Perl提供一行建议吗?Perl foreach i (`jot -c 26 65`) echo $i end 或在外壳内使用: for i in `perl -e '$,=" ";print +(A..Z)'` ; do echo
for i in 'A B C ...Z'; do echo $i; done
重点是我不想写A到Z,我想要类似的东西
[A-Z]
您能用AWK或Perl提供一行建议吗?Perl
foreach i (`jot -c 26 65`)
echo $i
end
或在外壳内使用:
for i in `perl -e '$,=" ";print +(A..Z)'` ; do echo $i ; done
那么:
for i in $(perl -e 'for my $i ("a".."z") { print "$i "; }'); do ...; done
。。。还是我误解了你想要实现的目标
(无可否认,使用
$,=''
的建议甚至比显式Perlfor
循环更好)。然而,我不理解在标点符号中包装范围的价值。如果我只使用:print A..Z代码>。。。虽然perl-we'print a..z;'给我一个关于无引号字符串的警告,但大写版本没有。语句
print+(a..z)给出了完全相同的警告。。。引用其中任何一条都可以消除警告。那么
+(…)`的意图是什么呢?只是想把它强制放到列表上下文中?希望您已经安装了Ruby。;)
请参见shell中的普通命令行:
使用Ruby从A到Z迭代并要求打印字母:
$ ruby -e ' "a".upto("z") {|letter| print letter}; print "\n"'
从A迭代到Z,并将当前迭代期间获得的值替换为字符串,然后打印该字符串:
$ ruby -e ' "a".upto("z") {|letter| puts "mkdir #{letter}"}'
执行列表以查看结果:
$ ls -al
drwxr-xr-x 2 iuliu users 4096 2009-10-07 00:09 a
drwxr-xr-x 2 iuliu users 4096 2009-10-07 00:09 b
drwxr-xr-x 2 iuliu users 4096 2009-10-07 00:09 c
$ls-al
drwxr-xr-x 2 iuliu用户4096 2009-10-07 00:09 a
drwxr-xr-x 2 iuliu用户4096 2009-10-07 00:09 b
drwxr-xr-x 2 iuliu用户4096 2009-10-07 00:09 c
希望这有点帮助!;)
问候,,
Iuliu没有人有呆滞的解决方案,因此这里有一个
awk 'BEGIN{for(i=65;i<=90;i++) printf "%c", i}'
awk'BEGIN{for(i=65;i使用awk:
您可以使用以下链接引用ASCII字符集:
现在,要遍历任何一组值,可以使用AWK命令,如下所示:
awk'BEGIN{for(i=97;i我有完全相同的问题。显而易见的Windows用例是遍历驱动器号列表。这在Cygwin中有效:
b{d..z};do(du-s)/cygdrive/$i;“”;中的i的
或者另一个例子:
b{d..h}{r..u};do df/cygdrive/$i|grep-v文件系统中的i的
或者是另一个使用Perl的示例-感谢:
perl-e'表示我的$i(“a”、“b”、“d”.“i”、“r”.“v”){print“$i\n”;}''sed-e's/^/\/cygdrive\/'
请写一行,一共3行。所以shell向foreach i(jot-c 26 65
)抱怨;echo$i;end jot:找不到命令。foreach?您只需在foreach var(…)后按enter键即可shell会让你继续输入行直到你输入End我想现在我理解了这个问题:Djot第一次出现在4.2BSD中。它可能不是在非BSD派生的操作系统中。它是“c-shell”而不是“玉米壳”。“Korn”shell完全是另一种动物。在bash中:$for I in{A..Z};do echo$I;doneIn Korn:$for I in{A..Z}^Jdo^Jecho$i^JDONE在bash中,您将省略字母周围的单引号。可能的重复。这不是我要寻找的。在上面,您无法迭代每个字母并对其进行处理,比如说mkdir,因为您无法单独访问它们。为什么不能迭代它们?Perl range运算符只返回一个列表。它类似于e任何其他列表。做任何你喜欢的事情。此外,你需要澄清你没有告诉我们的所有东西的问题。因为Andrei想在shell中迭代。为什么你在范围操作符周围有paren?我缺少一些奇怪的shell交互吗?我更喜欢perl-e'say for A..Z'
这不起作用“use strict”(使用strict)。您需要在A和Z周围加引号。但是strict在默认情况下不启用,所以我想这很好。perl-e'$,=”;print+(A,b,d..k,“m”,t..Z)
工作-需要在“m”周围加引号才能阻止perl将其解释为“match”运算符。在shell中:jot-c 26 A
。
mkdir a
mkdir b
mkdir c
mkdir d
...
mkdir z
$ mkdir $(ruby -e ' "a".upto("c") {|letter| puts "#{letter}"}')
$ ls -al
drwxr-xr-x 2 iuliu users 4096 2009-10-07 00:09 a
drwxr-xr-x 2 iuliu users 4096 2009-10-07 00:09 b
drwxr-xr-x 2 iuliu users 4096 2009-10-07 00:09 c
awk 'BEGIN{for(i=65;i<=90;i++) printf "%c", i}'