我们知道,perl有个区间操作符,[color=red]..[/color],例如:引用:
/home/lee#perl -e 'print a..z'
abcdefghijklmnopqrstuvwxyz/home/lee#
/home/lee#perl -e 'print A..Z,"\n"'
ABCDEFGHIJKLMNOPQRSTUVWXYZ
在shell里,同样可以实现
/home/lee#cat ch
#!/bin/bash
[[ $1 == [[:alpha:]] ]]&&[[ $2 == [[:alpha:]] ]]&&(($#==2)) || \
{ echo "Usage:$(basename $0) <a z>/<A Z>";exit 1; }
begin=$(echo $1|od -b)
begin=${begin:8:3}
end=$(echo $2|od -b)
end=${end:8:3}
while((begin<=end));do
[[ $begin != *[89] ]] && echo -ne "\\0$begin"
((begin++))
done
echo
test引用:
/home/lee#ch a z
abcdefghijklmnopqrstuvwxyz
/home/lee#ch A Z
ABCDEFGHIJKLMNOPQRSTUVWXYZ
/home/lee#ch x z
xyz
/home/lee#ch a Z #在perl里这个只打印小写26个字母
/home/lee#ch 1 a
Usage:ch <a z>/<A Z>
/home/lee#ch a
Usage:ch <a z>/<A Z>
/home/lee#ch , 4
Usage:ch <a z>/<A Z>
/home/lee#ch df 34
Usage:ch <a z>/<A Z>
大蚂蚁 回复于:2005-12-26 13:06:12
你啥时候研究perl去了? shell我还搞不懂,perl我只会请人帮忙。 烈火真是博学!
汗一下,perl的一下就懂了,shell的看了好久还有点晕晕的
是不是perl比shell简单啊?
寂寞烈火 回复于:2005-12-26 13:09:52
引用:原帖由 大蚂蚁 于 2005-12-26 13:06 发表
你啥时候研究perl去了? shell我还搞不懂,perl我只会请人帮忙。 烈火真是博学!
汗一下,perl的一下就懂了,shell的看了好久还有点晕晕的

shell还没吃透呢,哪有时间看别的 
waker 回复于:2005-12-26 13:48:23
火哥,不如开个帖子把这些小片段作一个总的目录吧:mrgreen:
寂寞烈火 回复于:2005-12-26 13:57:38
引用:原帖由 waker 于 2005-12-26 13:48 发表
火哥,不如开个帖子把这些小片段作一个总的目录吧:mrgreen:
我是想起一出是一出,等多了之后在整理吧
好好挖掘挖掘,shell潜力大的很呢
[ 本帖最后由 寂寞烈火 于 2005-12-26 14:00 编辑 ]
Rcfeng 回复于:2006-01-01 11:53:43
写perl命令行的时候,加一个-l吧,就不用你每句加\n了。perl的命令行基本可以涵盖甚至替代awk和sed的命令行用法,有兴趣可以看看这个 http://www-128.ibm.com/developerworks/cn/linux/sdk/perl/l-p102/index.html、http://www-128.ibm.com/developerworks/cn/linux/sdk/perl/l-p101/index.html
上面那位老兄说shell没研究透,不想看perl,呵呵,发表一下不同意见,perl在国外被誉为“瑞士军刀”,可见其功能全面和强大,很多时候可以很方便的替代shell。至少我现在基本不写超过100行的较大的shell脚本了。
现在一般linux发行版都会带perl。
这里有一本经典的perl指南,http://www.pgsqldb.org/twiki/bin/view/Perl/PerlProgramming3
寂寞烈火 回复于:2006-01-01 12:29:34
引用:原帖由 Rcfeng 于 2006-1-1 11:53 发表
写perl命令行的时候,加一个-l吧,就不用你每句加\n了。perl的命令行基本可以涵盖甚至替代awk和sed的命令行用法,有兴趣可以看看这个 http://www-128.ibm.com/developerworks/cn/linux/sdk/perl/l-p102/inde ...
perlline 我看过,很实用,
寂寞烈火 回复于:2006-01-02 04:23:15
/home/lee/myfile#cat ch
#!/bin/bash
#增加了反向输出,即rev的功效
#另外加上了对非法输入的判断
#
#
(($#==2))&&( [[ $1$2 == [[:lower:]][[:lower:]] ]] || [[ $1$2 == [[:upper:]][[:upper:]] ]] )||\
{ echo "Usage:${0##*/} <a z>/<A Z>";exit 1; }
begin=$(echo $1|od -b)
begin=${begin:8:3}
end=$(echo $2|od -b)
end=${end:8:3}
#
if [[ $begin < $end ]];then
while((begin<=end));do
[[ $begin != *[89] ]] && echo -ne "\\0$begin"
((begin++))
done
else
while((begin>=end));do
[[ $begin != *[89] ]] && echo -ne "\\0$begin"
((begin--))
done
fi
echo
test:引用:
/home/lee/myfile#sh ch a i
abcdefghi
/home/lee/myfile#sh ch i c
ihgfedc
/home/lee/myfile#sh ch A i
Usage:ch <a z>/<A Z>
/home/lee/myfile#sh ch A I
ABCDEFGHI
/home/lee/myfile#sh ch i C
Usage:ch <a z>/<A Z>
/home/lee/myfile#sh ch I A
IHGFEDCBA
/home/lee/myfile#sh ch a Z
Usage:ch <a z>/<A Z>
/home/lee/myfile#sh ch A Z
王紫豪 回复于:2006-01-03 21:47:42
火哥的帖子就是好!
王紫豪 回复于:2006-01-03 21:48:15
火哥的帖子就是好!
__lxmxn__ 回复于:2007-05-08 13:28:08
经典,收藏了
惠繪洋 回复于:2007-05-08 16:59:17
很好呢..
要收藏學習一下,
謝烈火兄.
|