Shell字符串操作集合
生活随笔
收集整理的這篇文章主要介紹了
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表示部署出那一個換行符 202.獲取字符串中,某些字符的個數
* $ 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 53.統計單詞的個數
* $ echo $var | wc -w4.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 me5.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 me8.sed有按行打印的功能,記得用tr把空格換為行號
* $ echo $var | tr " " "\n" | sed -n 5p me * $ echo $var | tr " " "\n" | sed -n 1p get9.tr來取子串
* $ echo $var | tr -d " " getthelengthofme * $ echo $var | tr -cd "[a-z]" #僅僅保留字母 getthelengthofme10.head和tail
* $ echo "abcdefghijk" | head -c 4 abcd * $ echo "abcdefghijk" | tail -c 4 hijk11.查詢字串
* $ var="get the length of me" $ expr index "$var" t 3 * $ echo $var | awk '{printf("%d\n",match($0,"the"));}' 512.子串替換
* $ 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 ME13.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 me15.刪除子串
* $ 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 " " getthelengthofme16.子串比較使用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 -n18.進制轉換
* $ echo "ibase=10;obase=16;10" | bc A19.正則表達式處理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.gz20.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文件中的組名和組id22.文件關聯操作
* $ 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字符串操作集合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从xml中返回的对象,和new 返回的对
- 下一篇: 【转】超酷的 mip-infinites