linux shell 字串操作(長度,查詢,替換)詳解 BASH
在做shell批處理程式時候,經常會涉及到字串相關操作。有很多命令語句,如:awk,sed都可以做字串各種操作。 其實shell內建一系列操作符號,可以達到類似效果,大家知道,使用內部操作符會省略啟動外部程式等時間,因此速度會非常的快。
一、判斷讀取字串值
表示式 含義 ${var} 變數var的值, 與$var相同 ${var-DEFAULT} 如果var沒有被宣告, 那麼就以$DEFAULT作為其值 * ${var:-DEFAULT} 如果var沒有被宣告, 或者其值為空, 那麼就以$DEFAULT作為其值 * ${var=DEFAULT} 如果var沒有被宣告, 那麼就以$DEFAULT作為其值 * ${var:=DEFAULT} 如果var沒有被宣告, 或者其值為空, 那麼就以$DEFAULT作為其值 * ${var+OTHER} 如果var聲明瞭, 那麼其值就是$OTHER, 否則就為null字串 ${var:+OTHER} 如果var被設定了, 那麼其值就是$OTHER, 否則就為null字串 ${var?ERR_MSG} 如果var沒被宣告, 那麼就列印$ERR_MSG * ${var:?ERR_MSG} 如果var沒被設定, 那麼就列印$ERR_MSG * ${!varprefix*} 匹配之前所有以varprefix開頭進行宣告的變數 ${[email protected]} 匹配之前所有以varprefix開頭進行宣告的變數
加入了“*” 不是意思是: 當然, 如果變數var已經被設定的話, 那麼其值就是$var.
[[email protected] ~]$ echo ${abc-'ok'}
ok
[[email protected] ~]$ echo $abc[[email protected] ~]$ echo ${abc='ok'}
ok
[[email protected] ~]$ echo $abc
ok如果abc 沒有宣告“=" 還會給abc賦值。
[[email protected] ~]$ var1=11;var2=12;var3=
[[email protected]~]$ echo ${[email protected]}
var1 var2 var3
[[email protected] ~]$ echo ${!v*}
var1 var2 var3${!varprefix*}與${[email protected]}相似,可以通過變數名字首字元,搜尋已經定義的變數,無論是否為空值。
二、字串操作(長度,讀取,替換)
表示式 含義 ${#string} $string的長度 ${string:position} 在$string中, 從位置$position開始提取子串 ${string:position:length} 在$string中, 從位置$position開始提取長度為$length的子串 ${string#substring} 從變數$string的開頭, 刪除最短匹配$substring的子串 ${string##substring} 從變數$string的開頭, 刪除最長匹配$substring的子串 ${string%substring} 從變數$string的結尾, 刪除最短匹配$substring的子串 ${string%%substring} 從變數$string的結尾, 刪除最長匹配$substring的子串 ${string/substring/replacement} 使用$replacement, 來代替第一個匹配的$substring ${string//substring/replacement} 使用$replacement, 代替所有匹配的$substring ${string/#substring/replacement} 如果$string的字首匹配$substring, 那麼就用$replacement來代替匹配到的$substring ${string/%substring/replacement} 如果$string的字尾匹配$substring, 那麼就用$replacement來代替匹配到的$substring
說明:"* $substring”可以是一個正則表示式.
1.長度
[[email protected] ~]$ test='I love china'
[[email protected] ~]$ echo ${#test}
12${#變數名}得到字串長度
2.擷取字串
[[email protected] ~]$ test='I love china'
[[email protected] ~]$ echo ${test:5}
e china
[[email protected] ~]$ echo ${test:5:10}
e china${變數名:起始:長度}得到子字串
3.字串刪除
[[email protected] ~]$ test='c:/windows/boot.ini'
[[email protected] ~]$ echo ${test#/}
c:/windows/boot.ini
[[email protected] ~]$ echo ${test#*/}
windows/boot.ini
[[email protected] ~]$ echo ${test##*/}
boot.ini[[email protected] ~]$ echo ${test%/*}
c:/windows
[[email protected] ~]$ echo ${test%%/*}${變數名#substring正則表示式}從字串開頭開始配備substring,刪除匹配上的表示式。
${變數名%substring正則表示式}從字串結尾開始配備substring,刪除匹配上的表示式。
注意:${test##*/},${test%/*} 分別是得到檔名,或者目錄地址最簡單方法。
4.字串替換
[[email protected] ~]$ test='c:/windows/boot.ini'
[[email protected] ~]$ echo ${test/\//\\}
c:\windows/boot.ini
[[email protected] ~]$ echo ${test//\//\\}
c:\windows\boot.ini${變數/查詢/替換值} 一個“/”表示替換第一個,”//”表示替換所有,當查詢中出現了:”/”請加轉義符”\/”表示。
三、效能比較
在shell中,通過awk,sed,expr 等都可以實現,字串上述操作。下面我們進行效能比較。
[[email protected] ~]$ test='c:/windows/boot.ini'
[[email protected] ~]$ time for i in $(seq 10000);do a=${#test};done;real 0m0.173s
user 0m0.139s
sys 0m0.004s[[email protected] ~]$ time for i in $(seq 10000);do a=$(expr length $test);done;
real 0m9.734s
user 0m1.628s速度相差上百倍,呼叫外部命令處理,與內建操作符效能相差非常大。在shell程式設計中,儘量用內建操作符或者函式完成。使用awk,sed類似會出現這樣結果。
相關推薦
linux shell 字串操作(長度,查詢,替換)詳解 BASH
在做shell批處理程式時候,經常會涉及到字串相關操作。有很多命令語句,如:awk,sed都可以做字串各種操作。 其實shell內建一系列操作符號,可以達到類似效果,大家知道,使用內部操作符會省略啟動外部程式等時間,因此速度會非常的快。 一、判斷讀取字串值表示式含義${var}變數var的值, 與$var相同
Linux Shell 字串操作(長度/查詢/替換)詳解
在做shell批處理程式時候,經常會涉及到字串相關操作。有很多命令語句,如:awk、sed都可以做字串各種操作。 其實shell內建一系列操作符號,可以達到類似效果,大家知道,使用內部操作符會省略啟動外部程式等時間,因此速度會非常的快。 一、判斷讀取字串值
shell字串操作(一)——字串變數
一、字串變數定義與賦值 符號意義: :空測試 =>空為真 - 負向測試 =>不存在為真 + 正向測試 =>存在為真 = 賦值 ?有問題,錯誤 表示式 含義 示例 var=string var='string
C語言中常用的字串操作(子串分割、替換、去前後空格、遞迴實現字串反轉)
在C語言中,並沒有像java中對字串操作的封裝好的函式,在C語言中,都需要自己根據C語言函式庫來實現常用的字串操作 一、字串的分割,根據子串進行分割 #include<stdio.h>
走進自動化運維之Ansible服務部署,附帶(參數及模塊)詳解!
輸入 epel源 檢測 鏈接文件 日誌輸出 運維 介紹 講解 book 何為Ansible: 簡單的自動化運維管理工具,不需要配置代理工具,基於Python研發。 Ansible是基於模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ans
linux 下所有格式打包解壓方法(tar、bz2、rar)詳解
01-.tar格式 解包:[*******]$ tar xvf FileName.tar 打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是壓縮!) 02-.gz格式 解壓1:[*******]$ gunzip FileName.gz 解壓2:[**
Linux 程序熱升級(共享庫的動態替換)
背景 使用者總是希望服務程序能保持穩定。如果可以 7*24 小時的工作,那就永遠不要重啟它。但是,軟體產品的功能總是在不斷的豐富。當用戶發現一些新的功能正是他所需要的,他也許會主動要求進行一次升級。而當嚴重的安全問題出現時,使用者就不得不接受強制的升級了。 不停機升級,也被稱為熱升級。通常實現熱升級,
pc端的企業網站(IT修真院test8)詳解1-1
tom eight auto scrip 插件 html 樣式 繼承 代碼實現 這任務需求我們使用推特的前端框架bootstrap來實現。先放psd圖。 上傳這些圖片也蠻大的。為此我使用office picture manager壓縮了圖片。 方法:alt+p+o,然後
pc端的企業網站(IT修真院test8)詳解1-4
isp city display hat borde 小圖標 test tro key 今天完成的事情:(1,偽元素:before,:after的使用。2.table的使用(collapse的使用)3rgba的高級運用) 今天我主要完成test8-3的頁面。 header
javascript 獲取get參數方法(獲取url參數方法)詳解
rip req 調用方法 div type body cape esc amp 網上有很多關於獲取url參數的方法,我給他們都加了註釋。不懂的朋友可以給我留言 1 <script type="text/javascript"> 2 func
堆樹(最大堆 最小堆)詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
svn branch and merge(svn切換分支和合並)詳解
先說說什麼是branch。按照Subversion的說法,一個branch是某個development line(通常是主線也即trunk)的一個拷貝,見下圖: branch存在的意義在於,在不干擾trunk的情況下,和trunk並行開發,待開發結束後合併回t
資料探勘-分類器的ROC曲線及相關指標(ROC、AUC、ACC)詳解
關於ROC曲線有幾篇老部落格。有一篇是一位博士寫的,不過不知道為什麼,那篇文章老是有迷之錯誤,從13年開始,一直訂正到17年,依舊存在錯誤,如舉例有問題、概念混淆(因為其文章包含了太多的概念,導致文法上的指代不清)。 >ROC(Receiver Operating
(資料科學學習手札62)詳解seaborn中的kdeplot、rugplot、distplot與jointplot
一、簡介 seaborn是Python中基於matplotlib的具有更多視覺化功能和更優美繪圖風格的繪圖模組,當我們想要探索單個或一對資料分佈上的特徵時,可以使用到seaborn中內建的若干函式對資料的分佈進行多種多樣的視覺化,本文以jupyter notebook為編輯工具,針對seaborn中的kd
(資料科學學習手札69)詳解pandas中的map、apply、applymap、groupby、agg
*從本篇開始所有文章的資料和程式碼都已上傳至我的github倉庫:https://github.com/CNFeffery/DataScienceStudyNotes 一、簡介 pandas提供了很多方便簡潔的方法,用於對單列、多列資料進行批量運算或分組聚合運算,熟悉這些方法後可極大地提升資料分析的效率,
linux shell 字串獲取長度、替換、擷取、刪除等操作(持續更新)
測試字串:str=/xxx/file.txt.gz一、長度、變數:說明 表示式 例子 結果 獲取長度 ${#string} ${#str} 16 列出所有以prefix開頭的變數 ${!prefix*}、${!prefix@} ${!st@} str測試${
awk字串操作(字串連結、傳入傳出shell變數) awk 字串連線操作(字串轉數字,數字轉字串) awk當中使用外部變數 awk中使用shell的環境變數 awk如何向shell傳值
1.awk基礎 awk的環境變數及其意義 https://blog.csdn.net/snowpay/article/details/52451718 linux awk命令詳解 https://www.cnblogs.com/xudong-bupt/p/3721210.html 2.aw
C語言 MOOC 單詞長度計算,GPS資訊處理 字串操作(函式,切分,尋找,轉換)
1.單詞長度題目內容:你的程式要讀入一行文字,其中以空格分隔為若干個單詞,以‘.’結束。你要輸出這行文字中每個單詞的長度。這裡的單詞與語言無關,可以包括各種符號,比如“it's”算一個單詞,長度為4。注意,行中可能出現連續的空格。輸入格式:輸入在一行中給出一行文字,以‘.’結
Spring boot集成Redis(1)—進行增加,更新,查詢,批量刪除等操作
緩存 獲取數據 prope XML ray end 序列 www pin 前言:最近工作中使用到了redis緩存,故分享一點自己總結的東西,這篇文章使用的是StringRedisTemplate進行學習,這裏值的說的是,(1)StringRedisTemplate在進行批量
linux shell 字串長度
本篇內容主要包括以下內容: 獲取字串長度的方法 各方法間效能比較 相關內容補充 說明:本篇內容為學習shell 程式設計(老男孩教程) 筆記,部分內容為相關視訊課程內容,補充部