shell 字符串分割與連接


1。字符串連接

your_id=${USER}-on-${HOSTNAME} echo "$your_id" your_id=`printf "%s%s%s" "$USER" "-on-" "$HOSTNAME"` echo "$your_id"

 

2.shell實現創建前一天時間的目錄
 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


免責聲明!

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



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