免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3344 | 回复: 11

【请教】如何在Bourne Shell中进行字符变换,把a变成n这样的 [复制链接]

论坛徽章:
0
发表于 2003-02-18 09:06 |显示全部楼层
我在写一个shell程序,要求进行一个简单的字符串变换功能,就是把一个字母变成字母表中它后面的第十三个字母,如果碰到末尾就折到头开始。就是a->n, b->o, A->N, n->a, o->b这样的。我已经琢磨了很久了,仍然不得要领。

首先,我想应该把一个字符串拆成单个的字符,然后才好做字符的转换。可是我不知道用什么方法可以做到这一点,用C什么的当然很好做,但是现在是shell,就有些不知所措了。

然后,要根据每个字符的ASCII码进行运算,加13再取模之类的,这个运算很简单,但是问题是我怎么才能在shell里得到一个字符的ASCII码呢?

再者,转换得到的ASCII码需要显示成对应的字符,我知道可以用echo "\0xx"这样的形式输出字符,但是这个数字是八进制的,而上一步运算应该是十进制的,怎么在shell中做进制转换呢?

我研究了grep, awk, sed等,好像都不是很灵光。是不是有什么其他的Unix命令可以用呢?不过不可以自己写个C程序什么之类的,要用基本的unix命令写的shell完成这个工作。

请各位多多帮助,在线等待中..........

论坛徽章:
0
发表于 2003-02-18 09:14 |显示全部楼层

【请教】如何在Bourne Shell中进行字符变换,把a变成n这样的

一个苯方法
tr "a" "n" inputfile
....................

论坛徽章:
0
发表于 2003-02-18 09:27 |显示全部楼层

【请教】如何在Bourne Shell中进行字符变换,把a变成n这样的

要分几步,咱们试试一个一个解决.
转换得到的ASCII码需要显示成对应的字符,我知道可以用echo "\0xx"这样的形式输出字符,但是这个数字是八进制的,而上一步运算应该是十进制的,怎么在shell中做进制转换呢?
aa=`printf "%o" 61`
echo "\0$aa"

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2003-02-18 10:33 |显示全部楼层

【请教】如何在Bourne Shell中进行字符变换,把a变成n这样的

这个行不啊,KSH 的,给个思路,还没细想

  1. set  -A    lower_letter  a b c d e f g h i j k l m n o p q r s t u v w x
  2. y z
  3. set  -A    upper_letter  A B C D E F G H I J K L M N O P Q R S T U V W X
  4. Y Z
复制代码


比如这时${lower_letter[0]} 等于a........${lower_letter[25]}=z,就把字母以数量连系起来
估计行得通,列为大虾意下如何

论坛徽章:
0
发表于 2003-02-18 11:13 |显示全部楼层

【请教】如何在Bourne Shell中进行字符变换,把a变成n这样的

laoxia 即使你这种方法
反过来通过字符查数字也不方便,比如a对应为0
也需要遍历一次整个数组.

论坛徽章:
0
发表于 2003-02-18 11:44 |显示全部楼层

【请教】如何在Bourne Shell中进行字符变换,把a变成n这样的

多谢各位.
用tr好像不太可以,因为你第一次把a替换成了n,如此循环,等到要替换n的时候,我怎么区分这个n是由a变过来的,还是原来就是呢?

laoxia的思路有启发,不过在标准的bsh里面有对应的set -A吗?我看了很多资料,都没有提到能够创建数组的。

大家继续努力,热切期盼中。

论坛徽章:
0
发表于 2003-02-18 11:56 |显示全部楼层

【请教】如何在Bourne Shell中进行字符变换,把a变成n这样的

多谢各位.
用tr好像不太可以,因为你第一次把a替换成了n,如此循环,等到要替换n的时候,我怎么区分这个n是由a变过来的,还是原来就是呢?

laoxia的思路有启发,不过在标准的bsh里面有对应的set -A吗?我看了很多资料,都没有提到能够创建数组的。

大家继续努力,热切期盼中。

论坛徽章:
0
发表于 2003-02-18 12:20 |显示全部楼层

【请教】如何在Bourne Shell中进行字符变换,把a变成n这样的

AIX下:
tr  '[a-m,n-z]'  '[n-z,a-m]'  < file1  >file2
tr  '[a-m,n-z]'  '[n-z,a-m]'  < file2  >file3

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2003-02-18 12:35 |显示全部楼层

【请教】如何在Bourne Shell中进行字符变换,把a变成n这样的

高,SOLARIS  7 sh 测试通过

论坛徽章:
0
发表于 2003-02-18 13:02 |显示全部楼层

【请教】如何在Bourne Shell中进行字符变换,把a变成n这样的

小弟对didikei大侠的敬仰之情犹如滔滔江水...........

原本对tr已经死心了,没想到竟然tr还有如此妙用。

小弟的script是这样的:
tr '[a-m,n-z,A-M,N-Z]' '[n-z,a-m,N-Z,A-M]'

所有问题都解决了,根本就不用我先前想的那么复杂。按照我以前的思路,还真有点儿不好折腾。

长见识,长见识!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP