日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Shell字符串操作集合

發布時間:2025/3/8 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shell字符串操作集合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 字符操作
    • 字符串的長度
    • 獲取字符串中某些字符的個數
    • 統計單詞的個數
    • bash提供的數組數據結構它是以數字為下標的和C語言從0開始的下一樣
    • awk里面的數組
    • 取子串
    • 匹配求子串
    • sed有按行打印的功能記得用tr把空格換為行號
    • tr來取子串
    • head和tail
    • 查詢字串
    • 子串替換
    • tac 會將文本的內容倒置顯示正如名字和 cat 相反一樣功能和cat也是相反的
    • 插入子串
    • 刪除子串
    • 子串比較使用test命令
    • 子串排序
    • 進制轉換
    • 正則表達式處理url
    • sed 和 awk 匹配文件中的行
    • 處理格式化的文本
    • 文件關聯操作

字符操作

1.字符串的長度

* $ var="get the length of me" $ echo ${#var} 20 * $ expr length "$var" #注意這里是雙引號 20 * $ echo $var | awk '{printf("%d",length($0))}' 20 * $ echo -n $var | wc -c # echo每次輸出時,會自動的輸出換行符,-n表示部署出那一個換行符 20

2.獲取字符串中,某些字符的個數

* $ echo $var | tr -cd g | wc -c 2 $ echo -n $var | sed 's/[^g]//g' | wc -c 2 $ echo -n $var | sed 's/[^gt]//g' | wc -c 5

3.統計單詞的個數

* $ echo $var | wc -w

4.bash提供的數組數據結構,它是以數字為下標的,和C語言從0開始的下一樣

* $ var="get length of me" $ var_arr=($var) #這里把var字符串,以數組的形式存放到var_arr中,默認以空格分割 $ echo ${var_arr[0]} ${var_arr[1]} ${var_arr[2]} ${var_arr[3]} ${var_arr[4]} get the length of me $ echo ${var_arr[@]} #@表示整個字符串 get the length of me $ echo ${var_arr[*]} #*表示整個字符串 get the length of me $ echo ${#var_arr[@]}#求得整個字符數組的元素個數 5 $ echo ${#var_arr[0]}#求得某個字符串的字符個數 3 $ var_arr[5]="new_element" #直接給數組元素賦值 $ echo ${var_arr[@]} get the length of me new_element $ echo ${#var_arr[@]} 6 * $ for i in $var; do echo $i" "; done; get the length of me

5.awk里面的數組

* echo $var | awk '{printf("%d %s\n",split($0,var_arr," "),var_arr[1])}' split把字符串按照空格分割,存放到var_arr中,并返回數組的長度,注意,這里第一個元素的下標不是0,而是1。 * awk把一行按照空格分成若干個域,并用$1,$2,$3...來引用,$0表示整行,NF表示該行域的總數。 * echo $var | awk '{split($0,var_arr," ");for(i in var_arr) printf("%s ",var_arr[i]);}' 這里的for循環中,循環變量為下標 * echo $var | awk '{split($0,var_arr," ");delete var_arr[1]}' 刪除第一個數組元素

6.取子串

* $ var="get length of me" $ echo ${var:0:3} get $ echo ${var(-2)} #反方向 me $ echo `expr substr "$var" 5 3` the $ echo $var | awk '{printf("%s\n",substr($0,9,6))}' #從第九個位置開始選取6個字符 length * 使用cut取子串 $ echo $var | cut -d " " -f 5 me * $ echo $var | sed 's/ [a-z]*//g' get 刪除空格+字母串 $ echo $var | sed 's/[a-z]* //g' me 刪除字母串+空格

7.匹配求子串

* $ echo ${var%% *} #從最右邊開始,刪除最左邊空格右邊的所有字符 get * $ echo ${var% *} #從最右邊開始,刪除第一個空格右邊的所有字符 get the length of * $ echo ${var##* } #從最左邊開始,刪除最右邊空格左邊的所有字符 me * $ echo ${var#* } #從最左邊開始,刪除第一個空格左邊的所有字符 the length of me

8.sed有按行打印的功能,記得用tr把空格換為行號

* $ echo $var | tr " " "\n" | sed -n 5p me * $ echo $var | tr " " "\n" | sed -n 1p get

9.tr來取子串

* $ echo $var | tr -d " " getthelengthofme * $ echo $var | tr -cd "[a-z]" #僅僅保留字母 getthelengthofme

10.head和tail

* $ echo "abcdefghijk" | head -c 4 abcd * $ echo "abcdefghijk" | tail -c 4 hijk

11.查詢字串

* $ var="get the length of me" $ expr index "$var" t 3 * $ echo $var | awk '{printf("%d\n",match($0,"the"));}' 5

12.子串替換

* $ var="get the length of me" $ echo ${var/ /_} #把第一個空格替換成下劃線 get_the length of me $ echo ${var// /_} #把所有的空格都替換成下劃線 get_the_length_of_me $ echo $var | awk '{sub(" ","_",$0);printf("%s\n",$0);}' get_the length of me $ echo $var | awk '{gsub(" ","_",$0);printf("%s\n",$0);}' get_the_length_of_me $ echo $var | sed 's/ /_/' get_the length of me $ echo $var | tr " " "_" get_the_length_of_me $ echo $var | tr "[a-z]" "[A-Z]" GET THE LENGTH OF ME

13.tac 會將文本的內容倒置顯示,正如名字和 cat 相反一樣,功能和cat也是相反的

14.插入子串

* $ var="get the length of me" $ echo ${var/ /_ } #在第一個空格前加上_ get_ the length of me $ echo ${var// /_ } #在所有的空格前都加上_ get_ the_ length_ of_ me $ echo ${var/ / _} get _the length of me $ echo ${var// / _} #在所有的空格之后都加上_ get _the _length _of _me* $ echo $var | sed 's//\1_/' #在第一個空格之后加上_ get _the length of me $ echo $var | sed 's//\1_/g' get _the _length _of _me $ echo $var | sed 's/[a?z]? [a?z]?/\2 \1/' #調換get和the的位置 the get length of me

15.刪除子串

* $ var="get the length of me" $ echo ${var// /} getthelengthofme* $ echo $var | awk '{gsub(" ","",$0);printf("%s",$0);}' getthelengthofme* $ echo $var | sed 's/ //g' getthelengthofme* $ echo $var | tr -d " " getthelengthofme

16.子串比較使用test命令

17.子串排序

* $ echo $var | tr " " "\n" | sort #正排序 get length me of the $ echo $var | tr " " "\n" | sort -r the of me length get * $ cat data.txt | tr " " "\n" | sort -n

18.進制轉換

* $ echo "ibase=10;obase=16;10" | bc A

19.正則表達式處理url

* $ url="ftp://anonymous:ftp@mirror.lzu.edu.cn/software/scim-1.4.7.tar.gz" $ echo $url | grep "ftp://[a-z]*:[a-z]*@[a-z0-9\./-]*" #判斷url的有效性 ftp://anonymous:ftp@mirror.lzu.edu.cn/software/scim-1.4.7.tar.gz * $ echo "$url" "$(expr index "$url" :)" | awk '{printf("%s\n",substr($1,1,$2-1));}' #截取協議 ftp $ echo ${url%%:*} ftp * $ echo ${url##*@} | cut -d "/" -f 1 #截取域名 mirror.lzu.edu.cn $ tmp=${url##*@};echo ${tmp%%/*} mirror.lzu.edu.cn * $ tmp=${url##*@};echo ${tmp%/*} #截取路徑 mirror.lzu.edu.cn/software * $ echo ${url##*/} #截取文件名 scim-1.4.7.tar.gz * $ echo $url | sed 's/.*[0-9].//g' #截取文件類型 tar.gz

20.sed 和 awk 匹配文件中的行

* $ sed -n 7,9p README #打印README7-9行

21.處理格式化的文本

* $ cat /etc/passwd | cut -d ":" -f 1,5 #截取/etc/passwd文件中的用戶名和組 * $ cat /etc/group | cut -d ":" -f 1,3 #截取/etc/group文件中的組名和組id

22.文件關聯操作

* $ join -o 1.1,2.1 -t":" -1 4 -2 3 /etc/passwd /etc/group #join命令用來連接兩個文件,類似于數據庫中兩個表的連接。-t指定分隔符, -1 4 -2 3 指定按照第一個文件的第四列和第二個文件的第三列,即組ID進行 連接,-o 1.1 2.1表示僅僅輸出第一個文件的第一列和第二個文件的第一列

總結

以上是生活随笔為你收集整理的Shell字符串操作集合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。