精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

五個絕妙的 Bash 字符串操作方法,每個開發者都應該掌握

開發
在本文中,我將解釋一些內置的字符串操作語法,您可以使用這些語法在 Bash 腳本中高效地處理文本。

?Bash 成為了每個類 Unix 或基于 Unix 的操作系統的默認自動化語言。每個系統管理員、DevOps 工程師和程序員通常使用 Bash 編寫具有重復命令序列的 shell 腳本。Bash 腳本通常包含運行其他程序二進制文件的命令。在大多數情況下,我們可能需要在 shell 腳本中處理數據并創建邏輯流程。因此,我們經常需要在 shell 腳本中添加條件語句和文本操作語句。

?傳統的 Bash 腳本和使用舊版本 Bash 解釋器的過去的程序員通常使用 awk、sed、tr 和 cut 命令進行文本操作。這些是單獨的程序。盡管這些文本處理程序提供了良好的功能,但它們會減慢您的 Bash 腳本,因為每個特定命令都具有相當的進程生成時間。現代 Bash 版本通過著名的參數擴展功能提供了內置的文本處理功能。

在本文中,我將解釋一些內置的字符串操作語法,您可以使用這些語法在 Bash 腳本中高效地處理文本。

子字符串提取和替換

子字符串是指特定字符串的連續片段或部分。在各種腳本編寫場景中,我們需要從字符串片段中提取子字符串。例如,您可能需要僅從包含擴展名的完整文件名中獲取文件名部分。此外,您可能需要使用特定字符串段替換子字符串(例如,更改文件名的文件擴展名)。

提取子字符串非常容易,只需提供字符位置和長度:

#!/bin/bash
# Linux迷 www.linuxmi.com

str="2023-10-12"

echo "${str:5:2}" # 10
echo "${str::4}" # 2023
echo "2022-${str:5}" # 2022-10-12

你甚至可以從右邊進行子字符串計算,如下所示:

#!/bin/bash
# Linux迷 www.linuxmi.com

str="backup.sql"

echo "original${str:(-4)}" # original.sql

Bash 還提供了一種高效的內置語法來進行子字符串替換:

#!/bin/bash
# Linux迷 www.linuxmi.com

str= "obin-linux_x64_bin"

echo " ${str/x64/armhf} " # obin-linux_armhf_bin
echo " ${str/bin/dist} " # odist-linux_x64_bin
echo " ${str// bin/dist} " # odist-linux_x64_dist
linuxmi@linuxmi:~/www.linuxmi.com$ ./linuxmi.sh
obin-linux_armhf_bin
odist-linux_x64_bin
odist-linux_x64_dist

當你處理一些字符串時,例如文件名、路徑等,你可能需要替換字符串的前綴和后綴。將一個文件擴展名替換為另一個擴展名就是一個很好的例子。看下面的例子:

#!/bin/bash
# Linux迷 www.linuxmi.com

str="db_config_backup.zip"

echo "${str/%.zip/.conf}" # db_config_backup.conf
echo "${str/#db/settings}" # settings_config_backup.zip

在上面的子字符串替換示例中,我們使用了確切的子字符串段進行匹配,但您還可以使用 * 通配符字符來使用子字符串的一部分,如下所示:

#!/bin/bash

str="db_config_backup.zip"

echo "${str/%.*/.bak}" # db_config_backup.conf
echo "${str/#*_/new}" # newbackup.zip

如果您不知道要搜索的確切子字符串,上述方法很有用。

正則表達式匹配、提取和替換

許多 Unix 或 GNU/Linux 用戶已經知道,可以使用 grep 和 sed 進行基于正則表達式的文本搜索。sed 幫助我們進行正則表達式替換。你可以使用內置的 Bash 正則表達式功能來處理文本,比使用這些外部二進制文件更快。

你可以使用 if 條件和 =~ 操作符執行正則表達式匹配,如下面的代碼片段所示:

#!/bin/bash
# Linux迷 www.linuxmi.com

str="db_backup_2003.zip"

if [[ $str =~ 200[0-5]+ ]]; then
echo "regex_matched"
fi

如果你想的話,也可以用內聯條件語句來替換 if 語句,如下所示:

[[ $str =~ 200[0-5]+ ]] && echo "regex_matched"

一旦 Bash 解釋器執行了一個正則表達式匹配,它通常會將所有匹配結果存儲在 BASH_REMATCH shell 變量中。這個變量是一個只讀數組,并將整個匹配的數據存儲在第一個索引中。如果使用子模式,則 Bash 會逐步將這些匹配項存儲在其他索引中:

 

#!/bin/bash
# Linux迷 www.linuxmi.com

str="db_backup_2003.zip"

if [[ $str =~ (200[0-5])(.*)$ ]]; then
echo "${BASH_REMATCH[0]}" # 2003.zip
echo "${BASH_REMATCH[1]}" # 2003
echo "${BASH_REMATCH[2]}" # .zip
fi

記得我們之前在子字符串匹配中使用了通配符嗎?類似地,可以在參數擴展中使用正則表達式定義,如下面的例子所示:

#!/bin/bash
# Linux迷 www.linuxmi.com

str="db_backup_2003.zip"
re="200[0-3].zip"

echo "${str/$re/new}.bak" # db_backup_new.bak

子字符串刪除技巧

我們在許多文本處理需求中經常需要預處理文本段,以刪除不需要的子字符串。例如,如果您提取了一個帶有 v 前綴和一些構建編號的版本號,并想找到主要版本號,則必須刪除一些子字符串。您可以使用相同的子字符串替換語法,但省略替換字符串參數以進行字符串刪除,如下所示:

#!/bin/bash
# Linux迷 www.linuxmi.com

str="ver5.02-2224.e2"

ver="${str#ver}"
echo $ver # 5.02-2224.e2

maj="${ver/.*}"
echo $maj # 5

在上面的示例中,我們使用了精確的子字符串和通配符進行子字符串刪除,但是您還可以使用正則表達式。看看如何提取一個不帶冗余字符的干凈版本號:

#!/bin/bash
# Linux迷 www.linuxmi.com

str="ver5.02-2224_release"

ver="${str//[a-z_]}"
echo $ver # 5.02-2224

大小寫轉換和基于大小寫的變量

即使是標準的 C 語言也提供了一個函數來轉換字符的大小寫。幾乎所有現代編程語言都提供了內置函數來進行大小寫轉換。作為一種命令語言,Bash 不提供大小寫轉換的函數,但它通過參數擴展和變量聲明為我們提供了大小寫轉換的功能。

請看下面的示例,它將字母的大小寫進行轉換:

#!/bin/bash
# Linux迷 www.linuxmi.com

str="Hello Bash!www.linuxmi.com"

lower="${str,,}"
upper="${str^^}"

echo $lower # hello bash!www.linuxmi.com
echo $upper # HELLO BASH!WWW.LINUXMI.COM

你也可以只將字符串的第一個字符大寫或小寫,如下所示:

#!/bin/bash
# Linux迷 www.linuxmi.com

ver1="V2.0-release"
ver2="v4.0-release"

echo "${ver1,}" # v2.0-release
echo "${ver2^}" # V4.0-release

如果您需要使特定變量嚴格大寫或小寫,您不需要每次都運行一個大小寫轉換函數。相反,您可以使用內置的declare命令為特定變量添加大小寫屬性,如下面的示例所示:

#!/bin/bash
# Linux迷 www.linuxmi.com

declare -l ver1
declare -u ver2

ver1="V4.02.2"
ver2="v2.22.1"

echo $ver1 # v4.02.2
echo $ver2 #V2.22.1

上面的 ver1 和 ver2 變量在聲明時接收到了大小寫屬性,因此每當你為一個特定的變量分配一個值時,Bash 會根據變量屬性轉換文本大小寫。

拆分字符串(字符串到數組的轉換)

Bash 允許你使用 declare 內置函數定義索引和關聯數組。大多數通用編程語言提供了在字符串對象中或通過標準庫函數中拆分方法(例如 Go 的 strings.Split 函數)。在 Bash 中,你可以使用多種方法拆分一個字符串并創建一個數組。例如,我們可以將 IFS 更改為所需的分隔符并使用 read 內置函數,或者我們可以使用 tr 命令和循環構建數組,另外使用內置參數展開也是一種方法。在 Bash 中有很多字符串拆分方法。

使用 IFS 和 read 是最簡單和無誤的拆分字符串的方法之一:

#!/bin/bash
# Linux迷 www.linuxmi.com

str="C,C++,JavaScript,Python,Bash"

IFS=',' read -ra arr <<< "$str"

echo "${#arr[@]}" # 5
echo "${arr[0]}" # C
echo "${arr[4]}" # Bash

上面的代碼片段使用,作為分隔符,并使用內置的read命令基于IFS創建一個數組。

即使有最簡單的方法可以在不使用read的情況下處理拆分,但要確保沒有隱藏的問題。例如,以下拆分實現非常簡單,但當您將*(擴展為當前目錄的內容)作為元素,空格作為分隔符時,它會出現問題:

#!/bin/bash
# Linux迷 www.linuxmi.com

# 警告:這段代碼有幾個隱藏的問題。

str="C,Bash,*"

arr=(${str//,/ })

echo "${#arr[@]}" # 包含當前目錄內容

責任編輯:趙寧寧 來源: Linux迷
相關推薦

2023-11-27 15:49:55

軟件開發系統設計

2023-11-17 14:18:48

開發編程

2025-08-29 07:00:00

Go并發開發

2022-04-27 09:48:56

JS前端開發

2019-11-20 12:09:01

JavaScriptGitHub工具

2022-10-13 15:19:33

JavaScript開發編程語言

2018-10-16 11:03:19

API開發者AR

2013-06-26 09:42:52

Web開發URL編碼URL

2019-11-23 23:38:51

開發者微服務安全

2025-03-05 09:21:08

2023-08-11 18:11:49

2020-10-13 18:20:55

TCPHTTP網絡協議

2025-01-07 10:01:10

2019-05-24 09:04:31

C++編程語言開發

2013-01-28 10:25:46

開發人員設計技巧

2020-06-03 18:10:46

GitHub代碼庫前端

2019-08-21 10:15:41

開發Redis數據

2021-03-09 10:26:24

Python開發工具

2016-09-28 22:44:40

HttpWeb

2024-09-02 14:30:43

點贊
收藏

51CTO技術棧公眾號

中文字幕一区二区三区波野结| av漫画在线观看| 岛国在线视频| 狠狠色丁香婷婷综合久久片| 欧美福利视频在线| 精品国产av色一区二区深夜久久 | 日韩欧美亚洲视频| 狠狠色丁香婷婷综合影院| 欧美日韩二区三区| 久久久久久免费看| 国产一区电影| 国产999精品久久久久久| 欧美一区二三区| 中文字幕美女视频| 人妖一区二区三区| 欧美女孩性生活视频| 欧美一级视频免费看| 日本a在线播放| 91在线视频在线| 成人黄色中文字幕| 欧美h在线观看| 在线一区电影| 亚洲男人第一网站| 美女流白浆视频| 日本午夜精品久久久久| 欧美日韩国产精品一区二区三区四区| 亚洲国产婷婷香蕉久久久久久99 | 精品久久99ma| 国产视频1区2区3区| 手机在线理论片| 一区二区三区日韩| 亚洲一区精彩视频| 男人的天堂在线免费视频| 粉嫩一区二区三区在线看| 国产噜噜噜噜噜久久久久久久久| 国产女同在线观看| 欧美三级黄美女| 久久天天躁狠狠躁夜夜躁| 亚洲成人黄色av| 婷婷国产精品| 亚洲国产小视频| 性生交大片免费看l| 精品国产亚洲一区二区在线观看 | 色婷婷综合成人av| 制服 丝袜 综合 日韩 欧美| 欧美福利在线播放网址导航| 精品久久久久久久久久久久久久久 | 亚洲成人中文| 久久国产天堂福利天堂| 顶级黑人搡bbw搡bbbb搡| 波多野结衣在线观看一区二区| 亚洲精品一区中文字幕乱码| a天堂视频在线观看| 亚洲一二av| 日韩你懂的在线观看| www.污网站| 精品一区二区三区中文字幕| 欧美久久久一区| www.久久91| 欧美日韩破处视频| 欧美精品在线视频| 182午夜视频| 福利一区三区| 日韩三级视频在线看| 中文字幕人妻无码系列第三区| 欧美高清一级片| 日韩欧美区一区二| 成人做爰69片免费| 蜜臀av一区| 亚洲免费电影在线观看| av网站免费在线看| 久久国产小视频| 日韩视频免费大全中文字幕| 日韩欧美国产成人精品免费| 欧美在线高清| 97碰碰碰免费色视频| youjizz在线视频| 蜜桃视频在线观看一区| 亚洲伊人久久综合| 日本免费一区视频| 97久久中文字幕| 欧美日韩精品一区二区| 色天使在线观看| 久久伊人影院| 亚洲黄色av女优在线观看| 日本黄色片在线播放| 国产一区二区亚洲| 久久影院资源网| 日本熟妇毛耸耸xxxxxx| 免费在线亚洲| 国产欧美日韩高清| 国产黄色一级大片| 26uuu欧美日本| 亚洲乱码国产乱码精品天美传媒| 性直播体位视频在线观看| 欧美日韩精品国产| 亚洲一区二区三区观看| 成人免费在线电影网| 亚洲性无码av在线| 成人免费视频网站入口::| 一本不卡影院| 91精品久久久久久| 深夜福利视频在线免费观看| 日韩一区有码在线| 亚洲熟妇av一区二区三区漫画| 色综合久久久| 日韩国产在线播放| www.色小姐com| 日韩国产精品久久久久久亚洲| 99影视tv| 亚洲欧美视频一区二区| 亚洲va在线va天堂| 香蕉视频999| 小嫩嫩12欧美| 色综合久久88色综合天天看泰| 黄色网址中文字幕| zzijzzij亚洲日本少妇熟睡| 成人短视频在线看| 国产精品亚洲一区二区三区在线观看| 日韩欧美卡一卡二| 永久免费未视频| 麻豆91精品| 国产高清一区视频| 欧美日本一道| 欧亚洲嫩模精品一区三区| 性色av蜜臀av浪潮av老女人| 天天综合网91| 国产精品一区二区性色av| 深夜福利在线观看直播| 亚洲精品视频一区二区| 久久久精品高清| 波多野结衣在线观看一区二区| 日本成人激情视频| 天天操天天舔天天干| 亚洲最大色网站| 中文字幕第10页| 久久久久久久久丰满| 国产精品高潮呻吟视频| 免费福利在线视频| 精品欧美国产一区二区三区| 国产+高潮+白浆+无码| 国模一区二区三区| 成人久久18免费网站漫画| 黄网站app在线观看| 欧美三级电影在线观看| 欧美黄色一级生活片| 麻豆久久婷婷| 欧美日韩一区二区三区在线视频 | 国模私拍一区二区三区| www.色呦呦| 亚洲精品国产成人久久av盗摄 | 亚洲天堂一区在线观看| 99精品在线免费| 成人毛片一区二区| 天堂一区二区三区四区| 欧美一区二区三区免费视| 亚洲aaaaaaa| 欧美视频第一页| 日本激情小视频| 首页国产欧美久久| 亚洲国产欧美一区二区三区不卡| 先锋影音网一区二区| 久久精品夜夜夜夜夜久久| 国产精品区在线观看| 亚洲日本在线看| 黑人无套内谢中国美女| 影音先锋亚洲电影| 久久99精品久久久久久久青青日本| 国产中文在线播放| 亚洲色在线视频| 一级特黄色大片| 一区二区三区久久| 久久精品女同亚洲女同13| 国产视频一区欧美| 亚洲国产精品视频一区| 亚洲国产欧美国产第一区| 欧美肥老妇视频| 亚洲色图欧美视频| 欧美三级蜜桃2在线观看| 青青草手机在线观看| 不卡在线观看av| 9久久婷婷国产综合精品性色| 66久久国产| 久久av一区二区三区漫画| 国产精品av一区二区三区| 日韩在线观看视频免费| 国产精品久久久久久久免费看| 一区二区高清免费观看影视大全| 人妻换人妻a片爽麻豆| 久久久夜夜夜| 国产免费xxx| 日韩欧美美女在线观看| 国产在线不卡精品| 午夜伦理福利在线| 不卡av电影在线观看| 亚洲精品国产av| 欧美在线|欧美| 黄色一级片在线| 久久精品欧美一区二区三区麻豆| www.久久com| 羞羞视频在线观看欧美| 国产成人三级视频| 中文字幕精品影院| 成人免费视频视频在| 亚洲成人短视频| 久久免费视频这里只有精品| 91最新在线| 亚洲韩国欧洲国产日产av| 国产欧美日韩综合精品一区二区三区| 欧美日韩在线观看视频| 美国黄色小视频| 国产精品三级av在线播放| 亚洲天堂资源在线| 国产一区二区91| 一道本视频在线观看| 亚洲深夜激情| 屁屁影院ccyy国产第一页| 欧美独立站高清久久| 欧美在线播放一区| 久久a爱视频| 99re在线视频观看| 日韩免费大片| 国产精品久久中文| 无遮挡在线观看| 国内精品在线一区| 日韩av毛片| 欧美精品一区二区三区国产精品| av中文字幕在线| 亚洲欧洲激情在线| 欧洲毛片在线| 亚洲精品久久久久久久久久久 | 免费观看一级欧美片| 欧美精品一区三区| av电影高清在线观看| 日韩在线欧美在线| 国产高清视频在线| 亚洲视频axxx| 激情小视频在线| 日韩精品一二三四区| 日本黄色一区二区三区| 精品国产乱码久久久久久夜甘婷婷 | 亚洲日本成人| 国产高清av在线播放| 亚洲精品欧洲| 成人中文字幕在线播放| 在线欧美亚洲| av黄色在线网站| 久热精品视频| 爆乳熟妇一区二区三区霸乳| 日韩有码一区二区三区| 妓院一钑片免看黄大片| 日韩在线观看一区二区| 性欧美极品xxxx欧美一区二区| 日韩电影免费在线看| 三级视频中文字幕| 日本成人中文字幕| 欧美丝袜在线观看| 国内久久精品视频| 国产精品91av| www.色精品| 丰满少妇高潮一区二区| 欧美国产丝袜视频| 国产乱子轮xxx农村| 亚洲精品写真福利| 日韩av黄色片| 91国偷自产一区二区三区观看| 国产男人搡女人免费视频| 欧美日韩在线综合| 国产男女猛烈无遮挡| 精品久久一区二区| 午夜成人鲁丝片午夜精品| 亚洲亚裔videos黑人hd| 米奇精品一区二区三区| 色综合久久88| 中文字幕av一区二区三区佐山爱| 国产精品久久久久999| 日韩成人免费av| 高清免费日韩| 国产精品美女久久久久久不卡| 亚洲国产午夜伦理片大全在线观看网站 | 蜜桃av在线| 国产精品久久久久久久久久 | 欧美va在线播放| 日本精品久久久久| 一区二区三区高清国产| 99热国产在线中文| 欧美亚洲一区在线| 电影中文字幕一区二区| 精品在线视频一区二区| 久久免费精品视频在这里| youjizz.com在线观看| 老司机一区二区三区| 九九九九九九九九| 91网上在线视频| 国产尤物在线播放| 精品福利一区二区| 国产精品久久久久久在线| 亚洲福利视频专区| 欧美尤物美女在线| 7m精品福利视频导航| 国产999精品在线观看| 欧美精品一区二区三区在线四季| 性xxxx欧美老肥妇牲乱| 无码人妻丰满熟妇区毛片18 | 日本一卡二卡在线| 中文字幕日韩av资源站| 无码人妻丰满熟妇精品| 精品人在线二区三区| 一本一道波多野毛片中文在线 | av磁力番号网| 日韩成人午夜精品| www.超碰97| 一区二区三区精品视频在线| 中文字幕精品在线观看| 亚洲精品二三区| 四虎影院观看视频在线观看| 国产精品视频xxx| 日韩有码中文字幕在线| www.激情网| 国产一区二区调教| 日本一区二区视频在线播放| 欧美日韩一区二区免费视频| 黄色av免费观看| 欧美久久精品一级黑人c片| 成人福利片在线| 欧美大香线蕉线伊人久久国产精品 | 日韩一区二区三区在线免费观看 | 黄频网站在线观看| 美日韩精品免费观看视频| 久久精品国产精品亚洲毛片| 欧美在线激情| 翔田千里一区二区| 日本aaa视频| 精品久久久久久久大神国产| 少妇av在线播放| 欧美激情女人20p| 亚洲一区二区三区免费| 91精品国产毛片武则天| 国产精品123| 一区二区在线观看免费视频| 51精品秘密在线观看| 日本在线www| 成人黄色大片在线免费观看| 成人区精品一区二区婷婷| 97公开免费视频| 国产精品久久久久久久浪潮网站 | 精品国产免费久久| 青春草视频在线观看| 国产精成人品localhost| 国内精品美女在线观看| 色哟哟无码精品一区二区三区| 亚洲永久精品国产| 日韩中文字幕综合| 性色av一区二区三区| 色吊丝一区二区| avav在线看| 国产欧美日韩另类视频免费观看| 波多野结衣在线观看一区| 在线视频亚洲欧美| 亚洲综合资源| 毛片在线视频观看| 99精品在线免费| 波多野结衣视频网址| 日韩一级黄色av| 91国内精品| 18禁男女爽爽爽午夜网站免费| 国产午夜精品一区二区三区嫩草| 中文字幕+乱码+中文字幕明步| 久久国内精品一国内精品| 日韩成人久久| 成人综合视频在线| 中文字幕va一区二区三区| 国产内射老熟女aaaa∵| 亚洲**2019国产| 欧美影院三区| 秋霞午夜鲁丝一区二区| 精品高清美女精品国产区| 国产视频在线看| 91九色在线免费视频| 国产视频久久| 日本高清一二三区| 亚洲国产精品免费| 成人影院在线免费观看| 黄色一级大片免费| 国产亚洲一区二区三区四区 | 精品少妇一区二区三区视频免付费| 91视频欧美| 亚洲视频在线二区| 成人avav影音| 中文字幕免费高清在线观看| 欧美黄色www| av一区二区在线观看| 激情综合激情五月| 欧美色爱综合网| 91资源在线观看| 2021狠狠干| 久久久国产一区二区三区四区小说 | 精品国产免费人成电影在线观... 精品国产免费久久久久久尖叫 | 丰满岳乱妇一区二区三区| 中文字幕天堂在线|