網(wǎng)站首頁 編程語言 正文
一、字符串變量的截取操作
對字符串變量的截取操作一般都是通過${操作符}的方式進行,如下:
1.從指定位置(index)截取固定長度
格式:${string:start:length}
其中,string 是要截取的字符串,start 是起始位置(下標(biāo)從 0 開始計數(shù)),length 是要截取的長度(省略的話表示直到字符串的末尾)
例如:
str_time='2022-02-01 12:30:58'
date_no=${str_time:0:10}? ? ? ? ? #截取前面10位字符:2022-01-01
date_mon=${str_time:5:2}? ? ? ? ?#從前面第6位開始截取2位字符:02
date_time=${str_time:0-8}? ? ? ? ?#截取后面8位字符:12:30:58
date_hh=${str_time:0-8:2}? ? ? ? ?#截取后面8位字符的前面兩位:12
2.截取指定字符串(子字符串)左邊的字符
格式1:${string%substr*}? ? ? ? ? ? ? ? ? ? ? ? ? #匹配從右往左第一個substr
格式2:${string%%substr*}? ? ? ? ? ? ? ? ? ? ? ?#匹配從右往左最后一個substr
說明:上面%的運算實際上可以理解為,刪除substr以及substr右邊的任意字符串,*號在substr右邊,從而得到substr左邊剩余字符串。? 格式1和格式2的區(qū)別是匹配substr的位置
例如:
v_str='/app/logs/133.38.112.177_202204111015.log'
echo ${v_str%/*}? ? ? ? ? ? ? #截取從右往左第一個'/' 左邊的字符:/app/logs
echo ${v_str%%/*}? ? ? ? ? ?#截取從右往左最后個'/' 左邊的字符:空
3.截取指定字符串(子字符串)右邊的字符
格式1:${string#*substr}? ? ? ? ? ? ? ? ? ? ? ? ? #匹配從左往右第一個substr
格式2:${string##*substr}? ? ? ? ? ? ? ? ? ? ? ? #匹配從左往右最后一個substr
說明:上面'#'的運算實際上可以理解為,刪除substr以及substr左邊的任意字符串,*號在substr的左邊,從而得到substr右邊剩余字符串。? 格式1和格式2的區(qū)別是匹配substr的位置
例如:
v_str='/app/logs/133.38.112.177_202204111015.log'
#截取從左往右第一個'/' 右邊的字符:app/logs/133.38.112.177_202204111015.log
echo ${v_str#*/}
#截取從左往右最后個'/' 右邊的字符:133.38.112.177_202204111015.log
echo ${v_str##*/}
注意:用%和#截取字符串的用法,比較容易忘記容易混淆。
有個小技巧加以區(qū)別:
鍵盤上#號在$符號的左邊,所以是操作并刪除左邊字符,所以*在substr左邊,一個#號代表取第一個substr(從左往右):${string#*substr}
鍵盤上%號在$符號的右邊,所以是操作并刪除右邊字符,所以*在substr的右邊,一個%代表取第一個substr(從右往左):${string%substr*}?
二、用cut命令截?。ㄟm合處理管道流或行文本字符)
格式:cut OPTION... [FILE]
cut 命令從文件的每一行剪切字節(jié)、字符和字段并將這些字節(jié)、字符和字段寫至標(biāo)準(zhǔn)輸出。
如果不指定 File 參數(shù),cut 命令將讀取標(biāo)準(zhǔn)輸入。必須指定 -b、-c 或 -f 標(biāo)志之一。
OPTION:
- -b :以字節(jié)為單位選取指定的字節(jié)數(shù)
- -c :以字符為單位選取指定的字符數(shù)
- -d :指定分隔符(默認(rèn)是tab)將字符串分為多個區(qū)域,一般與-f參數(shù)一起使用
- -f :與-d一起使用,指定選取哪個區(qū)域
- -n :取消分割多字節(jié)字符。僅和 -b 標(biāo)志一起使用。如果字符的最后一個字節(jié)落在由 -b 標(biāo)志的 List 參數(shù)指示的范圍之內(nèi),該字符將被寫出;否則,該字符將被排除
用法:
例如:處理test.txt文件,截取每一行的指定字符
$?cat test.txt?
a_202204110214_10.251.82.225
b_202204110215_10.251.82.223
b_202204110212_10.251.82.226
c_202204110214_10.251.82.228
-b選項:
$ cut -b 1,3 test.txt? ?#截取1,3字節(jié)
a2
b2
b2
c2
$ cut -b 1-3 test.txt? ?#截取1到3字節(jié)
a_2
b_2
b_2
c_2
-c選項:
$ cut -c 1,3 test.txt? ?#截取1,3字符
a2
b2
b2
c2
$ cut -c 1-3 test.txt? ?#截取1到3字符
a_2
b_2
b_2
c_2
-d -f選項:
$ cut -d'_' -f3 test.txt? ?#以下劃線分割,取第三個區(qū)域字符
10.251.82.225
10.251.82.223
10.251.82.226
10.251.82.228
$ cat test.txt | cut -d'_' -f3? ?#結(jié)合管道使用效果一樣
補充:使用%和%%:截取的是指定字符前邊內(nèi)容
val=“hello++world++shell”
echo ${val%++*}
# 刪除最后一個 ++ 后邊字符,截取前邊剩下的內(nèi)容
# 輸出: hello++world
echo ${val%%++*}
# 刪除第一個 ++ 后邊字符,只截取保留第一個 ++ 前邊的內(nèi)容
# 輸出: hello?
示例 截取文件名字,去掉后綴
str_file="123.hello.json"
echo ${str_file%.*}
# 刪除最后一個 . 后邊的json,截取123.hello
# 輸出: 123.hello
總結(jié)
原文鏈接:https://blog.csdn.net/weitp_csdn/article/details/124096633
相關(guān)推薦
- 2022-10-23 Go語言數(shù)據(jù)結(jié)構(gòu)之選擇排序示例詳解_Golang
- 2022-06-07 nlp自然語言處理基于SVD的降維優(yōu)化學(xué)習(xí)_python
- 2022-04-30 C語言實現(xiàn)小型工資管理系統(tǒng)_C 語言
- 2022-04-12 el-form表單驗證的一些方法總結(jié)
- 2022-07-06 QT5實現(xiàn)簡單的TCP通信的實現(xiàn)_C 語言
- 2023-02-05 Android?開發(fā)與代碼無關(guān)技巧詳解_Android
- 2022-12-06 React?Hook中的useEffecfa函數(shù)的使用小結(jié)_React
- 2023-01-03 Kotlin文件讀寫與SharedPreferences存儲功能實現(xiàn)方法_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支