Chinaunix

标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾 [打印本页]

作者: admirer    时间: 2003-12-07 23:11
标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾
用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调用,并且不能批处理
作者: bjgirl    时间: 2003-12-07 23:23
标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾
弓虽
作者: admirer    时间: 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/.//'
复制代码

用法和注意事项同上。
作者: bjgirl    时间: 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

作者: 網中人    时间: 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
复制代码

作者: admirer    时间: 2003-12-08 07:16
标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾

顶一下!
作者: c1l2d3    时间: 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
作者: 飞灰橙    时间: 2003-12-08 09:52
标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾
再弄个偷懒的perl版

  1. #!/usr/bin/perl

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

作者: c1l2d3    时间: 2003-12-08 10:04
标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾
[quote]原帖由 "飞灰橙"][/quote 发表:


楼上飞灰兄:给一个sco下的perl安装,可以吗?多谢
作者: 飞灰橙    时间: 2003-12-08 10:29
标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾
sry, 偶也没有:(
作者: bjgirl    时间: 2003-12-08 10:47
标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾
[quote]原帖由 "飞灰橙"][/quote 发表:

更简单的perl版本的rev
  1. #!perl -w
  2. print reverse@ARGV;
复制代码

作者: 飞灰橙    时间: 2003-12-08 10:55
标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾
[quote]原帖由 "bjgirl"]更简单的perl版本的rev[/quote 发表:

哈哈,逮到bug罗
作者: bjgirl    时间: 2003-12-08 10:58
标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾
原帖由 "飞灰橙" 发表:

哈哈,逮到bug罗

作者: 飞灰橙    时间: 2003-12-08 11:01
标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾
rev 1 2 3 4 5
54321

这么写就不行了
rev 12345
12345
作者: bjgirl    时间: 2003-12-08 14:43
标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾
原帖由 "飞灰橙" 发表:

哈哈,逮到bug罗
谢谢飞哥哥~~ ,不好意思~~
作者: admirer    时间: 2003-12-08 15:11
标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾
好多哟!
大家加油呀!
作者: bjgirl    时间: 2003-12-08 15:13
标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾
来个sed版本的tac!

  1. $cat _tac
  2. #!/bin/ksh
  3. n=$(cat $1|wc -l)
  4. while ((n!=0))
  5.         do
  6.         sed -n ${n}p $1
  7.         ((n-=1))
  8. done
复制代码

作者: ohwww    时间: 2003-12-08 20:35
标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾
学习啊,在这些强人面前我只能学习了
作者: don    时间: 2003-12-12 02:31
标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾
能举几个要用到rev的例子吗?
作者: admirer    时间: 2003-12-12 07:33
标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾
[quote]原帖由 "don"]能举几个要用到rev的例子吗?[/quote 发表:
嗯?前面不是已经列举了不少例子了?
作者: @龙井茶    时间: 2004-01-06 12:34
标题: 用shell写的rev,以弥补某些没有rev命令的OS之缺憾
perl 可以去www.perl.com下载




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2