shell腳本中有一種簡便的字串提取方式,能夠從類似test.doc中提取字符的文件名或者擴展名。
代碼如下(選自linux shell腳本攻略)
```
$a=hack.func.book.txt
#提取文件名一
$echo ${a%.*}
hack.func.book
#提取文件名二
$echo ${a%%.*}
hack
#提取擴展名一
$echo ${a#(*.)}
func.book.txt
#提取擴展名二
$echo ${a##*.}
txt
```
說明
```
<pre name="code" class="python">$a=hack.func.book.txt #我們要提取的字符串是這個
#提取文件名一
$echo ${a%(.*)} # 首先%確定我從右向左匹配,匹配滿足.*的字串,就是左邊一點右邊隨便是什么都行。于是
hack.func.book # 我從右往左找啊找,找到了第一個是.txt, 第二個是 .book.txt 第三個符合的字串是
# .func.book.txt 那么我匹配那一個呢?這時需要注意,我的%是不貪心的,匹配到第一個
# 時候我就高高興興收工了,好,我匹配到.txt了,然后我采取了減法思想,把他去掉,
# 就是hack.func.book了
#提取文件名二
$echo ${a%%(.*)} # %%要匹配的字符串和之前是一樣的,也是.*,他從右往左匹配的方法和前者是一樣的,也是
# 第一個.txt 第二個.book.txt 第三個.func.book.txt。 但是這貨比較貪心,它要一直匹配
# 匹配到最后一個才收工,于是它匹配到了滿足條件的最長的字串.func.book.txt,
# 好,下一步做掉它吧。于是就剩下 hack自己了。
#提取擴展名一
$echo ${a#(*.)} # #和%正好是相反的,#從左往右匹配,它要匹配像 *.這樣的字符,也就是左邊隨便是什么
func.book.txt # 最后有個.點號的字串。于是它開始從左匹配了,先后匹配到hack.然后是hack.fun.然后
# 還有hack.func.book. 它也是不貪心的non-freedy,所以收工拿到的是hack.這個東西,最
# 后我們同樣要將匹配到的刪除,最后就剩下func.book.txt了
提取擴展名二
$echo ${a##(*.)} # ##則是從左向右很猛的進行匹配,匹配到hack.func.book. 因此刪除他們的話,
txt # 就得到txt咯。
```
- 圖片處理
- 調整圖片像素大小
- Python控制攝像頭拍照
- 文件操作
- 提取文件名,擴展名
- 查找文件
- ls列出目錄,文件
- shell解析json串
- 讀取文件第n行內容
- 將變量寫入文件和從文件讀取變量的一中方法
- shell操作二進制文件
- 命令行將ppt轉換為pdf
- python讀取串口數據
- 查最近修改的文件
- awk的一些操作
- 輸入輸出
- 判斷輸入是否為數字
- 獲取腳本輸入的第 i 個參數
- column實現輸出列表對齊
- 串口調試腳本
- 按鍵實時檢測
- 網絡腳本
- 基于Python的TCP客戶端
- bash將字符轉換為urlencode
- 掛載遠程文件夾到本地
- 其他功能
- shell隨機產生某一個范圍內的整數
- 刪除、替換字符串中指定的字符
- 獲取時間日期并打印
- 字符串反轉
- 實用功能
- 自定義函數模板
- shell中包含另一個腳本文件實現include的方法
- Bash下實現自定義指令的幾種方法
- 根據文件類型自動執行腳本
- 命令行運行matlab
- 項目引導main.sh腳本
- 新建文件模板腳本
- bash實現讀取和改寫ini文件
- 添加當前路徑到fish shell環境變量
- 查詢進程并殺死進程
- 帶界面的身份驗證
- 常用軟件
- 基本軟件
- 我喜歡的軟件
- 自用帶有界面的系統修復工具-repair
- 解析xml文件