免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 8405 | 回复: 20
打印 上一主题 下一主题

用shell写的rev,以弥补某些没有rev命令的OS之缺憾  关闭 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-12-07 23:11 |只看该作者 |倒序浏览
用shell写的rev,以弥补某些没有rev命令的OS之缺憾
请大家测试修正!
  1. #!/bin/sh
  2. #ScriptName:rev
  3. a="$1"
  4. i=0
  5. s=""
  6. l=`expr length "${a}"`
  7. while [ $i -lt $l ]
  8. do
  9.     i=`expr $i + 1`
  10.     s="`expr substr "${a}" $i 1`""${s}"
  11. done
  12. echo "${s}"
复制代码

如果认为还行的话可以将它命令为rev放入/bin或/usr/bin下,作为系统命令使用
测试
  1. # rev 1234567890
  2. 0987654321
  3. # rev "12 34 56 78 90"
  4. 09 87 65 43 21
  5. # rev "a b c d e f g h ijk lmn o p q rst uvwxyz"
  6. zyxwvu tsr q p o nml kji h g f e d c b a
  7. # rev "abcdefghijklmnopqrstuvwxyz"
  8. zyxwvutsrqponmlkjihgfedcba

  9. cat a
  10. 1234567890
  11. abcdefghij

  12. while read line
  13. > do
  14. > echo ${line} | xargs rev
  15. > done <a

  16. 0987654321
  17. jihgfedcba
复制代码

说明:
1.当需要反转的串中含有空格时,请用引号括起来。
2.由于是shell写成,在管道中需要用xargs调用,并且不能批处理

论坛徽章:
0
2 [报告]
发表于 2003-12-07 23:23 |只看该作者

用shell写的rev,以弥补某些没有rev命令的OS之缺憾

弓虽

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2003-12-07 23:50 |只看该作者

用shell写的rev,以弥补某些没有rev命令的OS之缺憾

sed 版的,更简单些:
  1. #!/bin/sh
  2. #ScriptName:rev
  3. echo "$1"  | sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
复制代码

用法和注意事项同上。

论坛徽章:
0
4 [报告]
发表于 2003-12-08 00:15 |只看该作者

用shell写的rev,以弥补某些没有rev命令的OS之缺憾

来个cut版本的rev~~
  1. #!/bin/ksh
  2. len=${#1}
  3. while ((len!=0))
  4. do
  5. echo $1|cut -b$len-$len
  6. ((len-=1))
  7. done|tr -d '\n';echo
复制代码
测试:
$rev abcde12345
54321edcba

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2003-12-08 01:38 |只看该作者

用shell写的rev,以弥补某些没有rev命令的OS之缺憾

我也來段 bash 版的:
  1. #!/bin/bash
  2. IFS=
  3. for ((i=$((${#1}-1));i>=0;i--))
  4. do echo -n ${1:$i:1}; done
  5. echo
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2003-12-08 07:16 |只看该作者

用shell写的rev,以弥补某些没有rev命令的OS之缺憾


顶一下!

论坛徽章:
0
7 [报告]
发表于 2003-12-08 08:18 |只看该作者

用shell写的rev,以弥补某些没有rev命令的OS之缺憾

来一个笨版的:
cat rev
IFS=;
m=$1
k=`expr length $m`
while [ "1" -le "$k" ]
do
s=`echo $m | cut -c$k-$k`
echo $s"\c"
done

rev 1234567890
0987654321

论坛徽章:
0
8 [报告]
发表于 2003-12-08 09:52 |只看该作者

用shell写的rev,以弥补某些没有rev命令的OS之缺憾

再弄个偷懒的perl版

  1. #!/usr/bin/perl

  2. print reverse(split("", $ARGV[0]));
复制代码

论坛徽章:
0
9 [报告]
发表于 2003-12-08 10:04 |只看该作者

用shell写的rev,以弥补某些没有rev命令的OS之缺憾

[quote]原帖由 "飞灰橙"][/quote 发表:


楼上飞灰兄:给一个sco下的perl安装,可以吗?多谢

论坛徽章:
0
10 [报告]
发表于 2003-12-08 10:29 |只看该作者

用shell写的rev,以弥补某些没有rev命令的OS之缺憾

sry, 偶也没有:(
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP