亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Linux 使用shell腳本處理字符串的實現(xiàn)

 更新時間:2020年12月09日 11:04:43   作者:徐似安然Aaron  
這篇文章主要介紹了Linux 使用shell腳本處理字符串的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1. 截取字符串的前8位

expr substr "$string" 1 8
echo $string | awk '{print substr(,1,8)}'
echo $string | cut -c1-8
echo $string | dd bs=1 count=8 2>/dev/null

2. 分割、替換字符串

2.1 命令說明

符號 釋義
* 通配符,用于匹配字符串將被刪除的子串
. 分割符,可以為任意一個或多個字符
% 從右向左匹配
# 從左向右匹配
/ 表示替換
% # / 非貪婪匹配,即匹配符合通配符的最短結(jié)果
% ## // 貪婪匹配,即匹配符合通配符的最長結(jié)果

示例 含義
${#VALUE} 計算VALUE字符串的字符數(shù)量
${VALUE%.*} 或 ${VALUE%%.*} 刪除VALUE字符串中以分隔符"."匹配的右側(cè)字符,保留左側(cè)字符
${VALUE#*.} 或 ${VALUE##*.} 刪除VALUE字符串中以分隔符"."匹配的左側(cè)字符,保留右側(cè)字符
${VALUE/OLD/NEW} 或 ${VALUE//OLD/NEW} 用NEW子串替換VALUE字符串中匹配的OLD子串

2.2 應(yīng)用實例

定義變量name=odysee_odysee

計算VALUE字符串的字符數(shù)量

echo ${#name}  # 輸出結(jié)果 13

刪除VALUE字符串中以分隔符"."匹配的右側(cè)字符,保留左側(cè)字符

# 非貪婪匹配
echo ${name%y*}  # 輸出結(jié)果 odysee_od
# 貪婪匹配
echo ${name%%y*} # 輸出結(jié)果 od

刪除VALUE字符串中以分隔符"."匹配的左側(cè)字符,保留右側(cè)字符

# 非貪婪匹配
echo ${name#*y}  # 輸出結(jié)果 see_odysee
# 貪婪匹配
echo ${name##*y} # 輸出結(jié)果 see

用NEW子串替換VALUE字符串中匹配的OLD子串

# 非貪婪匹配
echo ${name/o/O} #輸出結(jié)果 Odysee_odysee

# 貪婪匹配
echo ${name//o/O} #輸出結(jié)果 Odysee_Odysee

3. 字符串截取

3.1 命令說明

示例 含義
${VALUE:POSITION} 在字符串VALUE中,從位置POSITION開始提取子串(從左到右匹配)
${VALUE:POSITION:LENGTH} 在字符串VALUE中,從位置POSITION開始提取長度為LENGTH的子串(從左到右匹配)
${VALUE:0-OFFSET} 在字符串VALUE中,從右到左截取OFFSET個字符
${VALUE:0-OFFSET:LENGTH} 在字符串VALUE中,從右到左截取OFFSET個字符的前LENGTH個

3.2 應(yīng)用實例

定義變量name=mynameisodysee

在字符串name中,從位置2開始提取子串(從左到右匹配)

echo ${name:2} # 輸出結(jié)果 nameisodysee

在字符串name中,從位置2開始提取長度為4的子串(從左到右匹配)

echo ${name:2:4} # 輸出結(jié)果 name

在字符串name中,從右到左截取8個字符

echo ${name:0-8} # 輸出結(jié)果 isodysee

在字符串name中,從右到左截取8個字符的前兩個

echo ${name:0-8:2} # 輸出結(jié)果 is

定義變量string=abc12342341 ,以下為截取示例

echo ${string:4}    # 從第4位開始截取后面所有字符串,輸出結(jié)果:2342341
echo ${string:3:3}   # 從第3位開始截取后面3位,輸出結(jié)果:123
echo ${string:3:6}   #從第3位開始截取后面6位,輸出結(jié)果:123423  
echo ${string: -4}   #截取后4位,輸出結(jié)果:2341
echo ${string:(-4)}   #同上  
expr substr $string 3 3 #從第3位開始截取后面3位,輸出結(jié)果123 

定義變量str="abcdef",以下為截取示例

expr substr "$str" 1 3 # 從第一個位置開始取3個字符,輸出結(jié)果:abc 
expr substr "$str" 2 5 # 從第二個位置開始取5個字符,輸出結(jié)果:bcdef  
expr substr "$str" 4 5 # 從第四個位置開始取5個字符,輸出結(jié)果:def 
echo ${str:2}      # 從第二個位置開始提取字符串,輸出結(jié)果:bcdef 
echo ${str:2:3}     # 從第二個位置開始提取3個字符,輸出結(jié)果:bcd 
echo ${str:(-6):5}   # 從倒數(shù)第二個位置向左提取字符串,輸出結(jié)果:abcde 
echo ${str:(-4):3}   # 從倒數(shù)第二個位置向左提取6個字符,輸出結(jié)果:cde

4. 判斷變量的值

4.1 命令說明

示例 含義
${string-DEFAULT} 如果string變量未定義,返回值為DEFAULT的值,否則返回變量的值
${string:-DEFAULT} 如果string變量未定義,或者其值為空,返回值為DEFAULT的值,否則返回變量的值
${string=DEFAULT} 如果string變量未定義,返回值為DEFAULT的值,并將DEFAULT賦值給string,否則返回變量的值
${string:=DEFAULT} 如果string變量未定義,或者其值為空,返回值為DEFAULT的值,
并將DEFAULT賦值給string,否則返回變量的值
${string+DEFAULT} 如果string已賦值,其值用DEFAULT替換,否則不進(jìn)行任何替換
${string:+DEFAULT} 如果string已賦值,其值用DEFAULT替換,否則不進(jìn)行任何替換
${string?ERR_MSG} 當(dāng)變量未被定義時,將ERR_MSG消息發(fā)送到標(biāo)準(zhǔn)錯誤輸出
${string:?ERR_MSG} 當(dāng)變量未被賦值時,將ERR_MSG消息發(fā)送到標(biāo)準(zhǔn)錯誤輸出

4.2 應(yīng)用實例

${string-DEFAULT}:如果string變量未定義,返回值為DEFAULT的值,否則返回變量的值

# 未定義string變量
echo ${string-string 變量未定義}  # 輸出結(jié)果:string 變量未定義

# 定義string變量,但值為空(會返回空值)
string=
echo ${string-string 變量未定義}  # 輸出結(jié)果為空

# 定義string變量并賦值
string=test
echo ${string-string 變量未定義}  # 輸出結(jié)果:test

${string:-DEFAULT}:如果string變量未定義,或者其值為空,返回值為DEFAULT的值,否則返回變量的值

# 未定義string變量
echo ${string:-string 變量未定義} # 輸出結(jié)果:string 變量未定義

# 定義string變量,但值為空
string=
echo ${string:-string 變量值為空} # 輸出結(jié)果:string 變量值為空

# 定義string變量并賦值
string=test
echo ${string:-string 變量值為空} # 輸出結(jié)果:test

${string=DEFAULT}:如果string變量未定義,返回值為DEFAULT的值,并將DEFAULT賦值給string,否則返回變量的值

# 未定義string變量
echo ${string=123}  # 輸出結(jié)果:123
echo ${string}  # 輸出結(jié)果:123

# 定義string變量,但值為空(會返回空值)
string=
echo ${string=123}  # 輸出結(jié)果為空
echo ${string}

# 定義string變量并賦值
string=test
echo ${string=123}  # 輸出結(jié)果:test
echo ${string}  # 輸出結(jié)果:test

${string:=DEFAULT}:如果string變量未定義,或者其值為空,返回值為DEFAULT的值,并將DEFAULT賦值給string,否則返回變量的值

# 未定義string變量
echo ${string:=123}  # 輸出結(jié)果:123
echo ${string}  # 輸出結(jié)果:123

# 定義string變量,但值為空
string=
echo ${string:=123}  # 輸出結(jié)果:123
echo ${string}  # 輸出結(jié)果:123

#定義string變量并賦值
string=test
echo ${string:=123}  # 輸出結(jié)果:test
echo ${string}  # 輸出結(jié)果:test

${string+DEFAULT}:如果string已賦值,其值用DEFAULT替換,否則不進(jìn)行任何替換

# 未定義string變量
echo ${string+123}  # 輸出結(jié)果為空
echo ${string}  # 輸出結(jié)果為空

# 定義string變量,但值為空
string=
echo ${string+123}  # 輸出結(jié)果:123
echo ${string}  # 輸出結(jié)果為空

# 定義string變量并賦值
string=test
echo ${string+123}  # 輸出結(jié)果:123
echo ${string}  # 輸出結(jié)果:test

${string:+DEFAULT}:如果string已賦值,其值用DEFAULT替換,否則不進(jìn)行任何替換

# 未定義string變量
echo ${string:+123}  # 輸出結(jié)果為空
echo ${string}  # 輸出結(jié)果為空

# 定義string變量,但值為空
string=
echo ${string:+123}  # 輸出結(jié)果為空
echo ${string}  # 輸出結(jié)果為空

# 定義string變量并賦值
string=test
echo ${string:+123}  # 輸出結(jié)果:123
echo ${string}  # 輸出結(jié)果:test

${string?ERR_MSG}:當(dāng)變量未被定義時,將ERR_MSG消息發(fā)送到標(biāo)準(zhǔn)錯誤輸出

# 未定義string變量
echo ${string?輸出錯誤信息} # 輸出結(jié)果:-bash: string: 輸出錯誤信息
echo ${string}  # 輸出結(jié)果為空

# 定義string變量,但值為空
string=
echo ${string?輸出錯誤信息} # 輸出結(jié)果為空
echo ${string}  # 輸出結(jié)果為空

# 定義string變量并賦值
string=test
echo ${string?輸出錯誤信息} # 輸出結(jié)果:test
echo ${string}  # 輸出結(jié)果:test

${string:?ERR_MSG}:當(dāng)變量未被賦值時,將ERR_MSG消息發(fā)送到標(biāo)準(zhǔn)錯誤輸出

# 未定義string變量
echo ${string:?輸出錯誤信息} # 輸出結(jié)果:-bash: string: 輸出錯誤信息
echo ${string}  # 輸出結(jié)果為空

# 定義string變量,但值為空
string=
echo ${string:?輸出錯誤信息} # 輸出結(jié)果:-bash: string: 輸出錯誤信息
echo ${string}  # 輸出結(jié)果為空

# 定義string變量并賦值
string=test
echo ${string:?輸出錯誤信息} # 輸出結(jié)果:test
echo ${string}  # 輸出結(jié)果:test

5. 獲取字符串長度

# 定義變量string=abc12342341
echo ${#string}  # 輸出結(jié)果 11
expr length $string # 輸出結(jié)果 11
expr "$string" : ".*" # 分號二邊要有空格,這里的:根match的用法差不多

6. 獲取字符串所在位置

# 定義變量str="abc"
expr index $str "a" # 輸出結(jié)果 1 
expr index $str "b" # 輸出結(jié)果 2 
expr index $str "x" # 輸出結(jié)果 0 
expr index $str ""  # 輸出結(jié)果 0  

7. 獲取從字符串開頭到子串的最大長度

# 定義變量string=abc12342341
expr match $string 'abc.*3' # 輸出結(jié)果 9

8. 顯示匹配的內(nèi)容

# 定義變量string=abc12342341
expr match $string '\([a-c]*[0-9]*\)' # 輸出結(jié)果 abc12342341  
expr $string : '\([a-c]*[0-9]\)'    # 輸出結(jié)果 abc1  
expr $string : '.*\([0-9][0-9][0-9]\)' # 輸出結(jié)果 341 顯示括號中匹配的內(nèi)容 

9. 顯示不匹配的內(nèi)容

# 定義變量string=abc12342341
echo ${string#a*3}   # 從$string左邊開始,去掉最短匹配子串,輸出結(jié)果:42341 
echo ${string#c*3}   # 這樣什么也沒有匹配到,輸出結(jié)果:abc12342341
echo ${string#*c1*3}  # 從$string左邊開始,去掉最短匹配子串,輸出結(jié)果:42341 
echo ${string##a*3}  # 從$string左邊開始,去掉最長匹配子串,輸出結(jié)果:41
echo ${string%3*1}   # 從$string右邊開始,去掉最短匹配子串,輸出結(jié)果:abc12342
echo ${string%%3*1}  # 從$string右邊開始,去掉最長匹配子串,輸出結(jié)果:abc12

# 定義變量str="abbc,def,ghi,abcjkl" 
echo ${str#a*c}     # 輸出結(jié)果:def,ghi,abcjkl 一個井號(#) 表示從左邊截取掉最短的匹配 (這里把abbc字串去掉) 
echo ${str##a*c}    # 輸出結(jié)果:jkl       兩個井號(##) 表示從左邊截取掉最長的匹配 (這里把abbc,def,ghi,abc字串去掉) 
echo ${str#"a*c"}    # 輸出結(jié)果:abbc,def,ghi,abcjkl  因為str中沒有"a*c"子串 
echo ${str##"a*c"}   # 輸出結(jié)果:abbc,def,ghi,abcjkl  同理 
echo ${str#*a*c*}    # 輸出結(jié)果:空 
echo ${str##*a*c*}   # 輸出結(jié)果:空 
echo ${str#d*f}     # 輸出結(jié)果:abbc,def,ghi,abcjkl,  
echo ${str#*d*f}    # 輸出結(jié)果:ghi,abcjkl   
echo ${str%a*l}     # 輸出結(jié)果:abbc,def,ghi     一個百分號(%)表示從右邊截取最短的匹配  
echo ${str%%b*l}    # 輸出結(jié)果:a           兩個百分號表示(%%)表示從右邊截取最長的匹配 
echo ${str%a*c}     # 輸出結(jié)果:abbc,def,ghi,abcjkl

# 這里要注意,必須從字符串的第一個字符開始,或者從最后一個開始,可以這樣記憶, 井號(#)通常用于表示一個數(shù)字,它是放在前面的;百分號(%)卸載數(shù)字的后面; 或者這樣記憶,在鍵盤布局中,井號(#)總是位于百分號(%)的左邊(即前面)

10. 去掉字符串末尾的字符

使用df -Th獲取磁盤信息,并將使用率賦給變量來與閾值進(jìn)行對比,如果存在%號無法進(jìn)行對比,所以需要去掉變量中的%號,可以使用${var%?}的格式來去掉最后一個字符

#!/bin/bash

root_usage=$(df -TPh | grep -w "/" | awk '{print $6}')
echo ${root_usage%?}

到此這篇關(guān)于Linux 使用shell腳本處理字符串的實現(xiàn)的文章就介紹到這了,更多相關(guān)shell處理字符串內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux之時鐘中斷詳解

    Linux之時鐘中斷詳解

    這篇文章主要介紹了Linux之時鐘中斷詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • shell實現(xiàn)SSH自動登陸的方法示例

    shell實現(xiàn)SSH自動登陸的方法示例

    這篇文章主要介紹了shell實現(xiàn)SSH自動登陸的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 2022最新vmstate?命令詳解

    2022最新vmstate?命令詳解

    這篇文章主要介紹了vmstate?命令詳解2022,主要包括使用vmstat命令的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Shell腳本如何逐行處理文本文件

    Shell腳本如何逐行處理文本文件

    這篇文章主要給大家介紹了關(guān)于Shell腳本如何逐行處理文本文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • shell 進(jìn)度條實現(xiàn)代碼

    shell 進(jìn)度條實現(xiàn)代碼

    shell實現(xiàn)的一個進(jìn)度條,感興趣的朋友不妨看看
    2013-02-02
  • Linux touch命令使用示例

    Linux touch命令使用示例

    我們平時用得最多的是通過touch創(chuàng)建一個空文件,實際上通過touch命令可以修改文件的atime、mtime,所以文件的真實訪問時間和修改時間是可以被修改,我們在排查系統(tǒng)異常的時候還需要結(jié)合日志、歷史命令等等因素綜合決策,本文介紹Linux touch命令,需要的朋友可以參考下
    2023-03-03
  • shell中set?-e的具體使用

    shell中set?-e的具體使用

    set?-e?是一個?Shell?命令,它用于在腳本運行時自動退出,本文主要介紹了shell中set?-e的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • Shell腳本數(shù)組用法小結(jié)

    Shell腳本數(shù)組用法小結(jié)

    這篇文章主要介紹了Shell腳本數(shù)組用法小結(jié),本文講解了數(shù)組聲明、數(shù)組遍歷、獲取數(shù)組長度、刪除數(shù)組元素、數(shù)組切片等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • shell 批量壓縮指定目錄及子目錄內(nèi)圖片的方法

    shell 批量壓縮指定目錄及子目錄內(nèi)圖片的方法

    下面小編就為大家?guī)硪黄猻hell 批量壓縮指定目錄及子目錄內(nèi)圖片的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • Shell逐行讀取文件的4種方法

    Shell逐行讀取文件的4種方法

    這篇文章主要介紹了Shell逐行讀取文件的4種方法,本文介紹了while循環(huán)法、重定向法、管道法、文件描述符法等一些方法,需要的朋友可以參考下
    2014-12-12

最新評論