shell 字符串分割與連接


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❌0:0:root:/root:/bin/bash
bin❌1:1:bin:/bin:/sbin/nologin
daemon❌2:2:daemon:/sbin:/sbin/nologin
adm❌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❌0:0:root:/root:/bin/bash
❌1:1:bin:/bin:/sbin/nologin
mon❌2:2:daemon:/sbin:/sbin/nologin
❌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

from https://www.cnblogs.com/gx-303841541/archive/2012/10/25/2738048.html


免責聲明!

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



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