shell中遍历字符串

来源:互联网 发布:自然语言处理数据挖掘 编辑:程序博客网 时间:2024/06/06 02:31

最近系统学习了shell编程.

看到书本里面的一个例子,很屌.之前自己也想过,但是没有得到结果.

相信同学们也猜到这个例子了,就是一行字符串的遍历.在看答案之前,同学们可以自己尝试一下.

这里我总结了三种方式.仅供参考.

1. 首先当然是书本里面的内容:

echo jalsdfjlasjdl | sed "s/[^\n]/&\n/g"

这个例子的输出就是把每个字符都单独成为一行了.

sed语句相信同学们都不陌生.唯一让人疑惑的可能就是&符号的使用.其实结合这个句子,也能够理解了.就是替代前面匹配的最小单位.[^\n]即匹配任何一个不是换行的字符.那么最小的单位自然就是单个字符.


2. 使用字符串拓展.代码如下:

#!/bin/bashstr="love you jingjing"for i in `seq ${#str}`doecho ${str:$i-1;1}done
在这段代码中,使用了大括号的拓展.第一个${#str}.代表str的长度.第二个${str:$i-1:1}意思是取str字符串的第i-1个位置的1个字符.

所以这里的打印自然也是按行打印出每个字符.这里我不知道怎么去解释为什么直接写$i-1都可以.我以为会报错.

3. 使用awk.这个是也不是完全自己的思考.也是通过借鉴资料总结的.

echo "love you jingjing " | awk -F "" '{for (i=1;i<=NF;i++) {print $i}}'  

其实如果真的了解awk这段代码也不是很难.难点在于我不知道""两个双引号挨着表示的就是没有分隔符,所谓没有,也就是空就是分隔符.太拗口了

理解了这个点,其它内容也就可以理解了.

是不是开始联想了.拆分成两个或以上怎么弄.

sed的方法:echo alksfdjals | sed "s/[^\n]\{2\}/&\n/g"

字符串拓展的方式:

#!/bin/bash -xalai="love you jingjing"for ((i=0;$i<=${#alai};i=$i+2));do     echo ${alai:$i:2};done
这段代码里面使用了小括号的特殊用法,即两个小括号连着,可以随意进行运算.我个人美其名曰c语言形式.


总结了这么几个思路用了好几天,而且都不是独立思考的,都或多或少的借鉴了别人或者书本上面的思路.虽然消化了.但是未免有点缺少独立的精神.

同学们在看了这篇文章以后,有没有自己的不同的思路呢

0 0