Shell中字符串截取、替換和刪除(非sed/awk方式)


1, 字符串截取

${變量名稱:截取位置:截取長度}
a=abcdefg
echo ${a:5:2} //從變量的第6位截取,截取2位
echo ${a:3:3} //從變量的第4位截取,截取3位
echo ${a:0:3} //從變量的第1位截取,截取3位
echo ${a::3} //上述的精簡寫法

編寫腳本,可以生成8位隨機字符
#!/bin/bash
x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
for i in {1..8} //循環8次
do
n=$[RANDOM%62] //得到0~61隨機數存在變量n中
k=${x:n:1} //使用字符串截取得到1個隨機字符,存在變量k中
a=$k$a //不斷往變量a中追加
done
echo $a //喊出最終結果,是一個8位長度的隨機字符,可以用作密碼

 

2, 字符串替換


${變量名稱/舊/新}
[root@svr7 opt]# a=12345
[root@svr7 opt]# echo ${a/4/6}
12365
[root@svr7 opt]# a=1122334455
[root@svr7 opt]# echo ${a/4/6}
1122336455
[root@svr7 opt]# echo ${a//4/6} //替換所有!
1122336655

 

3, 字符串刪除


${變量名稱#要刪除的內容}  即從左往右刪除   (掐頭)
${變量名稱%要刪除的內容}  即從右往左刪除  (去尾)
a=abcdefghijkl //定義變量作為素材
echo ${a#abcdefghij} //從左往右刪除,只留下kl
echo ${a#*j} //精簡寫法,效果同上
echo ${a#def} //無法從中間刪除
a=abcdefghijkl
echo ${a%defghijkl} //從右往左刪除,只留下abc
echo ${a%d*} //精簡寫法,效果同上

a=abcdabcd
echo ${a#*c} //從左往右刪除到第1個c
echo ${a##*c} //從左往右刪除到最后1個c
a=abcdabcd
echo ${a%c*} //從右往左刪除到第1個c
echo ${a%%c*} //從右往左刪除到最后1個c

 

4,定義變量初值(備用值)

    ${變量名:-初值}

#!/bin/bash

read -p '請輸入用戶名:' u
[ -z $u ] && echo "創建用戶前必須輸入用戶名!" && exit
useradd $u
stty -echo
read -p '請輸入密碼(默認123456):' p
stty echo
echo ${p:-123456} | passwd --stdin $u


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM