通配符與參數(shù)擴展
通配符:
*、?、!、()、[]、{}
參數(shù)擴展:%、%%、#、##、/、//、:、::
通配符
| 字符 | 含義 | 實例 | |
|---|---|---|---|
| * | 匹配 0 或多個字 符 | ab* | a 與b之間可以有任意長度的任意字符,也可以一個 也沒有,如ab, aab, acccccdb, a24322qqb。 |
| ? | 匹配任意單一字符 | a?b | a與b之間必須有一個任意字符,如aqb, acb,a7b。 |
| [list] | 匹配list中的任意單一字符 | a[xyz]b | a與b之間必須是list列出的任意一個字符, 如: axb,ayb,azb。 |
| [!list] | 匹配除list中的任 意單一字符 | a[!0-9]b | a與b之間必須是除去阿拉伯字符的任意一個字符,如 axb,aab,a-b。 |
| [c1-c2] | 匹配 c1-c2 中的 任意單一數(shù)字 | a[0-9]b | a與b之間必須是0與9之間的一個字符,如a0b,a1b...a9b 。 |
| {string1...} | 匹配 sring1或其 他字符串之一 | a{abc,xyz,123}b | a與b之間只能是abc或xyz或123這三個字符串之一 。 |
通配符:*、?、!、()、[]、{}
a*b類似正則表達(dá)式,又和正則表達(dá)式不一樣
這里的*與正則表達(dá)式里的不一樣,正則表達(dá)式a*b,表示a可以是任意多個
touch file{1..10}
##新建10個file文本
ls
ls file*
##*匹配file后任意字符
##grep、awk、sed 的里面的*表示正則表達(dá)式

*匹配示例
a?b的演示
##touch meak meal meil meyel meyl
##批量建多個文本
ls
ls me?l
##meal meil meyl,匹配me?l結(jié)構(gòu)。必須是l結(jié)尾才被識別,精準(zhǔn)匹配
rm -r meak meal meil meyel meyl
##一次性刪除多個文件

?匹配示例
以上是自己舉的例子,還是跟著小郭老師的例子:
touch fiie1
ls
ls fi?e1
##fiie1 file1

fi?e1里?的匹配
中括號[]任意匹配
[list]
ls
ls file[12345]
##file1 file2 file3 file4 file5,[12345]是可以單獨出現(xiàn)的,五選一匹配

中括號[]任意匹配
[!list]
ls
ls file[!12345]
##file6 file7 file8 file9,[!12345]的意思是不要列出含有[12345]任一個

非任意[!]匹配
{string1...}的演示
ls
rm fi*
##批量刪除開頭帶有fi的所有文本
ls
mkdir file{abc,123}
ls
rm -r file*
ls
touch file{1..10}
echo {1..10}
##1 2 3 4 5 6 7 8 9 10,1到10為一個等差序列。
ls
rm file*
ls

創(chuàng)建多個文件夾
注意:刪除touch生成的文本用rm file,不需要加-r,刪除mkdir生成的文件時,一定要加參數(shù)-r,用rm -r file*匹配刪除多個file。
通配符只要熟練掌握號的用法*
參數(shù)擴展
參數(shù)擴展:%、%%、#、##、
| 參數(shù)擴展 | 含義 |
|---|---|
| ${變量#關(guān)鍵字} | 若變量內(nèi)容從頭開始的數(shù)據(jù)符合“關(guān)鍵字”,則將符 合的最短數(shù)據(jù)刪除 |
| ${變量##關(guān)鍵字} | 若變量內(nèi)容從頭開始的數(shù)據(jù)符合“關(guān)鍵字”,則將符 合的最長數(shù)據(jù)刪除 |
| ${變量%關(guān)鍵字} | 若變量內(nèi)容從尾開始的數(shù)據(jù)符合“關(guān)鍵字”,則將符 合的最短數(shù)據(jù)刪除 |
| ${變量%%關(guān)鍵字} | 若變量內(nèi)容從尾開始的數(shù)據(jù)符合“關(guān)鍵字”,則將符 合的最長數(shù)據(jù)刪除 |
掐頭: # 掐掉最短頭部,## 掐掉最長頭部
去尾:% 去掉最短尾部,%% 去掉最長尾部
#去掉頭部字符串演示
id=Data.tar.gz
echo ${id}
#Data.tar.gz
echo ${id#*ta}
#.tar.gz
##從第一個ta開始匹配的,去掉Data,即去掉最短的頭部
echo ${id##*ta}
#r.gz
##去掉長的頭部

#去掉頭部字符串演示
%去掉尾部字符串演示
id=Data.tar.gz
echo ${id}
#Data.tar.gz

%去掉尾部字符串演示
其它參數(shù)擴展
/、//
替換//
| 參數(shù)擴展 | 含義 |
|---|---|
${變量 / 舊字符串/新字符串} |
若變量內(nèi)容符合“舊字符串”,則首個舊字符串會被新字符串替換 。 |
${變量//舊字符串/新字符串} |
若變量內(nèi)容符合“舊字符串”,則全部舊字符串會被新字符串替換 。 |
字符串的替換
id=Data.tar.gz
echo ${id}
##Data.tar.gz
echo ${id/ta/xy}
##Daxy.tar.gz
echo ${id//ta/xy}
##Daxy.xyr.gz

/替換字符串
截?。?/strong>索引位置從 0 開始 id=Data.tar.gz(R語言的下標(biāo)是從1開始,Linux是從0開始)
| 參數(shù)擴展 ${變量:索引:-n} | 含義 |
|---|---|
| ${變量:索引} | 截取變量從索引位置到末尾的所有字符 |
| ${變量:索引: n} | 截取變量從索引位置開始的n個字符 |
| ${變量:索引:(-n)} ; | 截取變量從索引位置到倒數(shù)第n+1位的 所有字符 |
${變量:索引:-n}
id=Data.tar.gz
##1D2a3ta4.5t6a7r9.10g11z
echo ${#id}
##11(一共有11位,包括.符號)
echo ${id:3}
##a.tar.gz(從3開始到最后)
echo ${id:3:5}
##a.tar(從3開始到后面的第5個,長度為5,不是從第三個到第五個)
echo ${id:3:-1}
#a.tar.g(第3位到倒數(shù)第一位,從第三位最后一位不取)

對變量索引