shell中拆分字符串
最近系统学习了shell编程.
看到书本里面的一个例子,很屌.之前自己也想过,但是没有得到结果.
相信同学们也猜到这个例子了,就是一行字符串的拆分.在看答案之前,同学们可以自己尝试一下.
这里我总结了三种方式.仅供参考.
1. 首先当然是书本里面的内容:
echo jalsdfjlasjdl | sed "s/[^\n]/&\n/g"
这个例子的输出就是把每个字符都单独成为一行了.
sed语句相信同学们都不陌生.唯一让人疑惑的可能就是&符号的使用.其实结合这个句子,也能够理解了.就是替代前面匹配的最小单位.[^\n]即匹配任何一个不是换行的字符.那么最小的单位自然就是单个字符.
2. 使用字符串拓展.代码如下:
#!/bin/bash str="love you jingjing" for i in `seq ${#str}` do echo ${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 -x alai="love you jingjing" for ((i=0;$i<=${#alai};i=$i+2)); do echo ${alai:$i:2}; done这段代码里面使用了小括号的特殊用法,即两个小括号连着,可以随意进行运算.我个人美其名曰c语言形式.
总结了这么几个思路用了好几天,而且都不是独立思考的,都或多或少的借鉴了别人或者书本上面的思路.虽然消化了.但是未免有点缺少独立的精神.
同学们在看了这篇文章以后,有没有自己的不同的思路呢
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。