精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

japanese色国产在线看视频| 午夜精品久久久久久久爽| 国模吧精品视频| 欧美二区在线观看| 国产xxxx振车| 国产毛片在线| 国产乱人伦偷精品视频不卡| 69影院欧美专区视频| 日本一道本视频| 亚洲视频国产| 欧美在线观看一二区| 8x8ⅹ国产精品一区二区二区| 四虎影视2018在线播放alocalhost| 蜜臀91精品一区二区三区| 欧美美女15p| 免费在线观看污| 亚洲精品黑牛一区二区三区| 色综合天天性综合| 男人添女荫道口女人有什么感觉| 成人午夜电影在线观看| 不卡一区中文字幕| 91在线观看免费高清完整版在线观看| 91九色丨porny丨肉丝| 亚洲欧美综合久久久| 亚洲欧美国产制服动漫| 亚洲av综合色区无码另类小说| avav成人| 色综合久久综合网欧美综合网| 国产成人亚洲综合无码| 香蕉视频免费在线播放| 久久久蜜臀国产一区二区| 国产日韩精品推荐| 精品久久久无码中文字幕| 日本强好片久久久久久aaa| 久久人人看视频| 四虎影院中文字幕| 日韩精品一区二区三区免费观影| 日韩成人中文字幕在线观看| 91porn在线| 一区二区三区欧洲区| 欧美日韩高清一区二区三区| 黄色一级大片在线观看| 黄毛片在线观看| 亚洲午夜激情av| 精品人妻大屁股白浆无码| 超碰在线观看免费| 17c精品麻豆一区二区免费| 亚洲丰满在线| av在线女优影院| 亚洲国产精品传媒在线观看| 欧美一区二区高清在线观看| 免费在线观看污视频| 久久综合国产精品| 免费看污久久久| 日韩a在线观看| 久久久综合网站| 视频二区一区| 日本在线丨区| 国产欧美视频一区二区三区| 日韩欧美国产二区| 69久久夜色| 综合久久久久久久| 4444在线观看| 96av在线| 日本韩国精品在线| 一本色道久久亚洲综合精品蜜桃 | 中文字幕人妻互换av久久 | 午夜av中文字幕| 精品国产18久久久久久二百| 日韩一区二区三区电影| 久久久久99人妻一区二区三区| 日韩视频1区| 精品国产乱码久久久久久影片| 99久久人妻精品免费二区| 岳的好大精品一区二区三区| 一本色道久久综合狠狠躁篇怎么玩| 亚洲成人黄色av| 色综合五月天| 欧美日韩不卡合集视频| 国产乡下妇女做爰毛片| 久久精品亚洲| 91麻豆国产精品| 人妻va精品va欧美va| 久久免费精品国产久精品久久久久| 亚洲国产精品综合| 青春草在线免费视频| 欧美日韩国产限制| 天天干天天爽天天射| 亚洲国产一区二区三区网站| 亚洲人成电影网站色www| 日本一级特级毛片视频| 亚洲日本免费| 国产精品久久久久久久美男| 精品久久久久中文慕人妻| 91网站在线观看视频| 亚洲精品国产精品国自产| 天堂av最新在线| 色综合天天综合网天天看片| 国内自拍第二页| 琪琪久久久久日韩精品| 日韩中文字幕免费看| 国产真实夫妇交换视频| 免费xxxx性欧美18vr| 国产高清精品一区| 日本激情在线观看| 欧美视频在线观看免费| 亚洲高清在线不卡| 国产精品欧美三级在线观看| 欧美黄色片视频| 一级爱爱免费视频| 91蜜桃在线观看| 国产制服91一区二区三区制服| 欧美性理论片在线观看片免费| 欧美一区二区三区的| 国产熟妇久久777777| 国产精品99免费看| 国产欧美日韩精品在线观看| 免费成人av电影| 亚洲综合无码一区二区| 日本在线播放一区二区| 亚洲精品亚洲人成在线观看| 欧美激情亚洲另类| 国产精品爽爽久久| 国产欧美综合色| 成人综合视频在线| 69精品国产久热在线观看| 日韩一级裸体免费视频| 激情五月婷婷网| caoporn国产精品| 黄色特一级视频| 国产免费av国片精品草莓男男| 亚洲午夜av电影| 亚洲天堂一区在线观看| 不卡的电视剧免费网站有什么| 警花观音坐莲激情销魂小说| 欧美大片网站| 在线色欧美三级视频| 在线视频一区二区三区四区| 99这里都是精品| 缅甸午夜性猛交xxxx| 高潮久久久久久久久久久久久久 | 久草中文在线视频| 国产精品一卡二卡在线观看| 亚洲免费视频播放| 久久三级中文| 欧美成人精品一区二区| 国产suv一区二区| 亚洲女爱视频在线| av在线免费观看不卡| 欧美.www| av一区二区三区在线观看| 污污片在线免费视频| 日韩欧美中文字幕精品| 久青草视频在线观看| 国产a精品视频| 美脚丝袜脚交一区二区| 开心激情综合| 欧美在线一级va免费观看| 男人久久精品| 欧美午夜影院一区| 日本成人精品视频| 国产精品综合在线视频| 国产av熟女一区二区三区| 国产精品chinese在线观看| 国内伊人久久久久久网站视频| 性xxxxbbbb| 在线视频你懂得一区| 手机免费观看av| 国产福利91精品一区| 成人免费性视频| 自拍视频一区| 91精品国产综合久久久久久蜜臀 | 亚洲18在线看污www麻豆| 日韩久久精品网| 147欧美人体大胆444| sm在线观看| 国产一区二区三区直播精品电影| 亚洲一级特黄毛片| 亚洲综合激情小说| 午夜一区二区三区免费| 麻豆国产精品官网| 男人天堂手机在线视频| 国产亚洲一区| 91九色在线观看| 日本免费一区二区六区| 色综合亚洲精品激情狠狠| 亚洲精品无码专区| 在线一区二区三区四区| 国产亚洲精品av| 国产三区在线成人av| 91大神免费观看| 亚洲一区日本| 欧美日韩在线免费观看视频| 日本欧美韩国国产| 91九色国产在线| 大胆人体一区| 欧美日韩国产成人高清视频| 高清美女视频一区| 精品久久久久久久一区二区蜜臀| 波多野结衣爱爱| 亚洲国产日韩a在线播放 | 亚洲人成小说网站色在线| 亚洲图片综合网| 精品写真视频在线观看| www.com毛片| 欧美女激情福利| 亚洲欧美日产图| 日本福利一区| 国产精品大全| www一区二区三区| 国产精品福利网站| 交100部在线观看| 九九久久久久99精品| 91大神在线网站| 日韩成人在线播放| 丰满人妻一区二区| 538prom精品视频线放| 中文字幕免费高清网站| 午夜精品久久久久久不卡8050| 91免费公开视频| 中文欧美字幕免费| www在线观看免费视频| 91在线观看地址| 少妇搡bbbb搡bbb搡打电话| 国内精品国产三级国产a久久| 北条麻妃视频在线| 国产婷婷精品| 男人添女荫道口图片| 欧美视频日韩| 欧美在线观看视频免费| 亚洲二区三区不卡| 中文字幕成人一区| 欧美激情另类| 亚洲自拍偷拍二区| sdde在线播放一区二区| 日韩福利在线| 精品国产乱码久久久久久1区2匹| 蜜桃狠狠色伊人亚洲综合网站| 麻豆一区二区| 九色91国产| 在线视频亚洲专区| 日本在线观看一区| 精品理论电影| 日韩精品第一页| 欧美日韩在线二区| 日韩精品久久久毛片一区二区| 中文字幕精品影院| 日韩久久不卡| 色999日韩| 一区二区在线高清视频| 久久精品久久久| 大桥未久一区二区三区| 在线中文一区| aa视频在线播放| 亚洲综合不卡| 欧美国产日韩在线播放| 蜜桃视频一区二区三区| 亚洲欧美日韩精品一区| 国产精品一区二区果冻传媒| 免费在线观看日韩av| 9l国产精品久久久久麻豆| 97人妻精品一区二区免费| 日本一区二区三区在线不卡| www.xx日本| 亚洲美女精品一区| 国产乱码久久久久久| 精品久久久久久久久久久久| 国产精品第六页| 欧美肥妇毛茸茸| 日本黄色三级视频| 亚洲性无码av在线| 哥也色在线视频| 97精品在线视频| 无人区在线高清完整免费版 一区二| 国产男人精品视频| 欧美午夜在线播放| 狠狠色噜噜狠狠色综合久| 欧美日韩中文一区二区| a级网站在线观看| 一本久久知道综合久久| 午夜免费高清视频| 国产成人综合自拍| 中文字幕国产综合| 亚洲色图19p| 日韩精品在线免费视频| 欧美日韩五月天| 日本美女一级片| 日韩中文字幕久久| av资源中文在线天堂| 国产精品入口夜色视频大尺度| 欧美不卡在线观看| 欧美男人的天堂| 91精品久久久久久久久久不卡| 毛片在线播放视频| 久久66热re国产| 亚洲av无码成人精品国产| 亚洲三级在线看| 你懂的国产在线| 日韩区在线观看| av女优在线| 欧美亚洲国产日韩2020| 久久av网站| 日韩欧美手机在线| 精品福利av| 亚洲男人天堂av在线| 久久久精品人体av艺术| 久草资源在线视频| 欧美日韩电影一区| 牛牛热在线视频| 97久久久免费福利网址| 国产aa精品| 亚洲国产一区在线| 亚洲主播在线| 国产清纯白嫩初高中在线观看性色| 亚洲国产精品成人久久综合一区 | h视频在线免费观看| 国产精品igao视频| 亚洲高清极品| 阿v天堂2017| 从欧美一区二区三区| 午夜写真片福利电影网| 欧美日本韩国一区二区三区视频| 欧美精品少妇| 亚洲 日韩 国产第一| 视频在线观看免费影院欧美meiju| 亚洲成人网上| 视频在线观看一区二区三区| 久久人人妻人人人人妻性色av| 亚洲一区日韩精品中文字幕| 国产一区二区小视频| 日韩在线视频导航| 69堂免费精品视频在线播放| 欧美18视频| 国产农村妇女精品一二区| 国产xxxx视频| 亚洲成人免费影院| 日本激情一区二区| 97免费视频在线播放| 超碰成人在线观看| 日韩欧美不卡在线| 不卡一区中文字幕| 国产特黄大片aaaa毛片| 亚洲国产精品久久久久| 蜜乳av一区| 黄色99视频| 国产欧美一区二区三区国产幕精品| 日韩精品视频一区二区| 午夜电影一区二区三区| 神马一区二区三区| 欧美亚洲成人网| 精品毛片免费观看| 在线免费观看av的网站| 国产精品二三区| aaa一区二区| 国内精品久久久久久久| 香蕉久久夜色精品国产使用方法| 北条麻妃在线视频观看| 国产亚洲成年网址在线观看| 在线观看免费视频一区| 久久视频在线免费观看| 日韩精品视频一区二区三区| 日本一本中文字幕| 久久女同性恋中文字幕| 中文在线字幕免费观| 日韩专区在线播放| 网站一区二区| 成人免费aaa| 国产精品欧美久久久久一区二区| 国产美女裸体无遮挡免费视频| 欧美高清自拍一区| 台湾色综合娱乐中文网| 91香蕉视频导航| 亚洲欧美国产三级| 日韩一级中文字幕| 国产精品国产三级国产aⅴ浪潮| 欧美国产一级| 扒开伸进免费视频| 欧美亚洲动漫另类| 在线观看午夜av| 欧美精品与人动性物交免费看| 蜜桃av噜噜一区| 日韩三级一区二区三区| 在线观看中文字幕亚洲| 精品视频在线观看网站| 国产男女在线观看| ㊣最新国产の精品bt伙计久久| 亚洲欧美黄色片| 国产伦精品免费视频| 激情av一区| 又色又爽的视频| 亚洲精品国产品国语在线| 国产乱子精品一区二区在线观看| 亚洲色成人www永久在线观看 | 欧美色欧美亚洲另类七区| 精品一区二区三区久久| 亚洲精品男人的天堂| 久久亚洲精品中文字幕冲田杏梨| 亚洲欧洲av| 国产调教打屁股xxxx网站| 欧美吞精做爰啪啪高潮|