標籤:linux shell
最近系統學習了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語言形式.
總結了這麼幾個思路用了好幾天,而且都不是獨立思考的,都或多或少的借鑒了別人或者書本上面的思路.雖然消化了.但是未免有點缺少獨立的精神.
同學們在看了這篇文章以後,有沒有自己的不同的思路呢
shell中拆分字串