1. 程式人生 > >linux shell 字串操作(長度,查詢,替換)詳解 BASH

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修真院test81-1

tom eight auto scrip 插件 html 樣式 繼承 代碼實現 這任務需求我們使用推特的前端框架bootstrap來實現。先放psd圖。 上傳這些圖片也蠻大的。為此我使用office picture manager壓縮了圖片。 方法:alt+p+o,然後

pc端的企業網站IT修真院test81-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 mergesvn切換分支和合並

先說說什麼是branch。按照Subversion的說法,一個branch是某個development line(通常是主線也即trunk)的一個拷貝,見下圖: branch存在的意義在於,在不干擾trunk的情況下,和trunk並行開發,待開發結束後合併回t

資料探勘-分類器的ROC曲線及相關指標ROC、AUC、ACC

關於ROC曲線有幾篇老部落格。有一篇是一位博士寫的,不過不知道為什麼,那篇文章老是有迷之錯誤,從13年開始,一直訂正到17年,依舊存在錯誤,如舉例有問題、概念混淆(因為其文章包含了太多的概念,導致文法上的指代不清)。 >ROC(Receiver Operating

資料科學學習手札62seaborn中的kdeplot、rugplot、distplot與jointplot

一、簡介   seaborn是Python中基於matplotlib的具有更多視覺化功能和更優美繪圖風格的繪圖模組,當我們想要探索單個或一對資料分佈上的特徵時,可以使用到seaborn中內建的若干函式對資料的分佈進行多種多樣的視覺化,本文以jupyter notebook為編輯工具,針對seaborn中的kd

資料科學學習手札69pandas中的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集成Redis1—進行增加更新查詢批量刪除等操作

緩存 獲取數據 prope XML ray end 序列 www pin 前言:最近工作中使用到了redis緩存,故分享一點自己總結的東西,這篇文章使用的是StringRedisTemplate進行學習,這裏值的說的是,(1)StringRedisTemplate在進行批量

linux shell 字串長度

本篇內容主要包括以下內容:    獲取字串長度的方法    各方法間效能比較    相關內容補充 說明:本篇內容為學習shell  程式設計(老男孩教程) 筆記,部分內容為相關視訊課程內容,補充部