1。字符串連接
your_id=${USER}-on-${HOSTNAME} echo "$your_id" your_id=`printf "%s%s%s" "$USER" "-on-" "$HOSTNAME"` echo "$your_id"
1 aaa=`date +%Y%m%d --date='1 days ago'`; 2 bbb="mkdir "$aaa 3 $bbb 4 5 6 7 filename=$1 8 string1=exist 9 string2=xi 10 command="cat $filename | grep $string1 | grep $string2" 11 eval $command 12 13 14 [~/shell]# sh test.sh runshell.sh 15 echo "exist;"; 16 echo "notexist;";
3.linux shell substr(分割字符串)
原來在shell中如果遇到要截取字符串的情況,就調用awk中的substr來實現。
今天了解到一種新的方法,原來shell中本身就支持這種用法。
如,有一字符串”12345678″,現在要截取第三個到第六個字符的字符串區間。
則可以:
1 [xok.la ~]$ export str="123456789"
2 [xok.la ~]$ echo ${str:3:(6-3)} 3 456
4 [xok.la ~]$ unset str
從以上第二個表達式可以看出這個用法,即:${str:3:(6-3)}
可以歸納為:${str:begin:len},且支持表達式,如:6-3。
補充一下從網上找到一些其他的用法:
shell字符串的截取的問題:
一、Linux shell 截取字符變量的前8位,有方法如下:
1.expr substr "$a" 1 8
2.echo $a|awk '{print substr(,1,8)}'
3.echo $a|cut -c1-8
4.echo $ 5.expr $a : '\(.\\).*'
6.echo $a|dd bs=1 count=8 2>/dev/null
二、按指定的字符串截取
1、第一種方法:
${varible##*string} 從左向右截取最后一個string后的字符串
${varible#*string}從左向右截取第一個string后的字符串
${varible%%string*}從右向左截取最后一個string后的字符串
${varible%string*}從右向左截取第一個string后的字符串
“*”只是一個通配符可以不要
例子:
$ MYVAR=foodforthought.jpg
$ echo ${MYVAR##*fo}
rthought.jpg
$ echo ${MYVAR#*fo}
odforthought.jpg
2、第二種方法:${varible:n1:n2}:截取變量varible從n1到n2之間的字符串。
可以根據特定字符偏移和長度,使用另一種形式的變量擴展,來選擇特定子字符串。試着在 bash 中輸入以下行:
$ EXCLAIM=cowabunga
$ echo ${EXCLAIM:0:3}
cow
$ echo ${EXCLAIM:3:7}
abunga
這種形式的字符串截斷非常簡便,只需用冒號分開來指定起始字符和子字符串長度。
三、按照指定要求分割:
比如獲取后綴名
ls -al | cut -d "." -f2
4.既然提到了cut命令,就再找一篇文檔吧
cut命令是用來剪下文本文件里的數據,文本文件可以是字段類型或是字符類型。下面給出應用實例: /> cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin ... ... /> cut -d : -f 1,5 /etc/passwd #-d后面的冒號表示字段之間的分隔符,-f表示取分割后的哪些字段 root:root #這里取出的是第一個和第五個字段。 bin:bin daemon:daemon adm:adm ... ... /> cut -d: -f 3- /etc/passwd #從第三個字段開始顯示,直到最后一個字段。 0:0:root:/root:/bin/bash 1:1:bin:/bin:/sbin/nologin 2:2:daemon:/sbin:/sbin/nologin 3:4:adm:/var/adm:/sbin/nologin 4:7:lp:/var/spool/lpd:/sbin/nologin ... ... 這里需要進一步說明的是,使用cut命令還可以剪切以字符數量為標量的部分字符,該功能通過-c選項實現,其不能與-d選項共存。 /> cut -c 1-4 /etc/passwd #取每行的前1-4個字符。 /> cut -c-4 /etc/passwd #取每行的前4個字符。 root bin: daem adm: ... ... /> cut -c4- /etc/passwd #取每行的第4個到最后字符。 t:x:0:0:root:/root:/bin/bash :x:1:1:bin:/bin:/sbin/nologin mon:x:2:2:daemon:/sbin:/sbin/nologin :x:3:4:adm:/var/adm:/sbin/nologin ... ... /> cut -c1,4 /etc/passwd #取每行的第一個和第四個字符。 rt b: dm a: ... ... /> cut -c1-4,5 /etc/passwd #取每行的1-4和第5個字符。 root: bin:x daemo adm:x