亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

shell字符串匹配的實現(xiàn)

 更新時間:2020年12月11日 10:08:18   作者:xy913741894  
這篇文章主要介紹了shell字符串匹配的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、簡介

      Bash Shell提供了很多字符串和文件處理的命令。如awk、expr、grep、sed等命令,還有文件的排序、合并和分割等一系列的操作命令。grep、sed和awk內(nèi)容比較多故單獨列出,本文只涉及字符串的處理和部分文本處理命令。

二、字符串處理

1、expr命令

expr引出通用求值表達式,可以實現(xiàn)算術(shù)操作、比較操作、字符串操作和邏輯操作等功能。

(1)計算字符串長度

字符串名為string,可以使用命令${#string}或expr length $string兩種方法來計算字符串的長度。若string包括空格,需用雙引號引起來(expr length后面只能跟一個參數(shù),string有空格會當(dāng)作多個參數(shù)處理)。


(2)子串匹配索引

      expr的索引命令格式為:expr index $string $substring(子串),在字符串$string上匹配$substring中字符第一次出現(xiàn)的位置,匹配不到,expr index返回0。

"wo"在字符串string中雖然出現(xiàn)在第7,但還是返回o首次出現(xiàn)的位置5。

(3)子串匹配的長度

       expr match $string $substring,在string的開頭匹配substring字符串,返回匹配到的substring字符串的長度,若string開頭匹配不到則返回0,其中substring可以是字符串也可以是正則表達式。

"world"盡管在string中出現(xiàn),但是未出現(xiàn)在string的開頭處,因此返回0。

(4)抽取子串

Bash Shell提供兩種命令#{...}和expr實現(xiàn)抽取子串功能。

其中#{...}有兩種格式。

格式一:#{string:position}從名稱為$string的字符串的第$position個位置開始抽取子串,從0開始標號。

格式二:#{string:position:length}增加$length變量,表示從$string字符串的第$position個位置開始抽取長度為$length的子串。

(都是從string的左邊開始計數(shù)抽取子串)


#{...}還提供了從string右邊開始計數(shù)抽取子串的功能。

格式一:#{string: -position},冒號與橫杠間有一個空格

格式二:#{string:(position)}

expr substr也能夠?qū)崿F(xiàn)抽取子串功能,命令格式:expr substr $string $position $length,與#{...}最大不同是expr substr命令從1開始進行標號。

接著使用正則表達式抽取子串的命令,但只能抽取string開頭處或結(jié)尾處的子串。

抽取字符串開頭處的子串,格式一:expr match $string ' $substring '。格式二:expr $string : ' $substring ',其中冒號前后都有一個空格。

抽取字符串結(jié)尾處的子串,格式一:expr match $string '.* $substring '。格式二:expr $string : '.* $substring '。.*表示任意字符的任意重復(fù)。

(5)刪除子串

刪除字串是指將原字符串中符合條件的子串刪除,命令只有${...}格式。

從string開頭處刪除子串,格式一:${string#substring},刪除開頭處與substring匹配的最短子串。格式二:${string##substring}刪除開頭處與substring匹配的最長子串。其中substring并非是正則表達式而是通配符。

從string結(jié)尾處開始刪除,格式一:${string%substring},刪除結(jié)尾處與substring匹配的最短子串。格式二:${string%%substring}刪除結(jié)尾處與substring匹配的最長子串。與上述命令僅在#和%之間不同。

(5)替換子串

替換子串命令都是${...},可以在任意處、開頭處、結(jié)尾處替換滿足條件的子串。其中的substring都不是正則表達式而是通配符。

在任意處替換子串命令,格式一:${string/substring/replacement},僅替換第一次與substring相匹配的子串。格式二:${string//substring/replacement},替換所有與substring相匹配的子串。

在開頭處替換與substring相匹配的子串,格式為:${string/#substring/replacement}。

在結(jié)尾除替換與substring相匹配的子串,格式為:${string/%substring/replacement}。

三、對文件的排序、合并和分割

      文本處理命令包括sort命令、uniq命令、join命令、cut命令、paste命令、split命令、tr命令和tar命令,它們實現(xiàn)對文件記錄排序、統(tǒng)計、合并、提取、粘貼、分割、過濾、壓縮和解壓縮等功能,它們與sed和awk構(gòu)成了Linux文本處理的所有命令和工具。

(1)sort命令

sort命令是一種對文本排序的工具,它將輸入文件看做由多條記錄組成的數(shù)據(jù)流,而記錄由可變寬度的字段組成,以換行符作為定界符。sort命令格式:sort [選項] [輸入文件]

       sort命令默認的域分隔符是空格符,-t選項可用于設(shè)置分隔符。sort -t: test中-t與":"之間是沒有空格的。未指定-t分隔符是空格符,這時記錄內(nèi)開頭與結(jié)尾的空格都將被忽略,如(空格):root:(空格)則只有一個域,-t:指定冒號則這條記錄就包含了三個域。

         sort命令默認是按第1個域進行排序的,也可以通過-k選項指定某個域進行排序。例如:sort -t: -k3 test。

       sort命令-n選項可以指定根據(jù)數(shù)字大小進行排序(不按字母順序排序)。

       sort命令-r選項用于將排序結(jié)果逆向顯示,如使用-n按數(shù)字從小到大排序后,使用-r選項將結(jié)果逆向顯示。

       sort命令-u選項去掉排序結(jié)果中的重復(fù)行。

       sort命令-o選項加上文件名將結(jié)果保存到另一個文件中(sort默認將排序后的結(jié)果輸出到屏幕上)。

       sort命令-m選項將兩個排好序的文件合并成一個排好序的文件,在文件合并前它們必須已經(jīng)排好序。-m選項對未排序的文件合并是沒有任何意義的。

       sort和awk都是分域處理文件的工具,兩者結(jié)合起來可以有效地對文本塊進行排序。

(2)uniq命令

      uniq命令用于去除文本文件中的重復(fù)行,類似sort -u,但uniq命令去除的重復(fù)行必須是連續(xù)重復(fù)出現(xiàn)的行,中間不能夾雜任何其他文本行,而sort -u命令使所有的重復(fù)記錄都被去掉。

      uniq命令有3個選項:


 uniq -c test,打印每行在文本中重復(fù)出現(xiàn)的次數(shù)。

(3)join命令

      join命令用于實現(xiàn)兩個文件中記錄的連接操作,將兩個文件中具有相通域的記錄選擇出來,再將這些記錄所有的域放在一行(包含來自兩個文件的所有域)。如join -t: a.txt b.txt,將a.txt和b.txt具有共同域的記錄連接到一起。

       join命令的結(jié)果默認是不顯示這些未進行連接的記錄,-a和-v選項用于顯示這些未進行連接的記錄,-a1和-v1指顯示文件1中未連接的記錄,而-a2和-v2指顯示文件2中的未連接記錄。-a與-v的區(qū)別是:-a顯示以共同域進行連接的結(jié)果和未進行連接的記錄,而-v則不顯示以共同域進行連接的記錄。

       join命令默認顯示連接記錄在兩個文件中的所有域,而且按順序。-o選項用于改變結(jié)果顯示的格式,可以指定顯示哪幾個域、按什么順序顯示這些域。例如:join -t: -o1.1 2.2 1.2 a.txt b.txt,其中-o1.1 2.2 1.2表示顯示格式依次顯示第1個文件中的第1個域、第2個文件中的第2個域、第1個文件中的第2個域,結(jié)果顯示三個域。

     join -t: -i -1 3 -2 1 a.txt b.txt,文件1的第3個域和文件2的第1個域進行連接,-i忽略大小寫。join命令在對兩個文件進行連接時,兩個文件必須都是按照連接域排好序的。

(4)cut命令

cut命令用于從標準輸入或文本文件中按域或行提取文本,cut [選項] 文件,cut的選項如下:

      cut -c1-5 a.txt,提取a.txt的第1~5個字符。-c有三種表示方式:-cn表示第n個字符、-cn,m表示第n個字符和第m個字符、-cn-m表示第n個字符到第m個字符。-c是按字符提取文本的,無須使用-d改變域分隔符,-f按域提取文本時就需要使用-d設(shè)置域分隔符了。-f同樣也可以用三種方式指定域數(shù)或域范圍。

     cut可以靈活提取文本文件中的內(nèi)容,默認將提取內(nèi)容放在標準輸出上,也可以使用文件重定向來將內(nèi)容保存到文件。

(5)paste命令

paste命令用于將文本文件或標準輸出中的內(nèi)容粘貼到新的文件,它可以將來自不同文件的數(shù)據(jù)粘貼到一起,形成新的文件。paste命令格式:paste [選項] file1 file2,其選項如下:

       paste FILE1 FILE2,粘貼FILE1和FILE2,F(xiàn)ILE1在前,將FILE1的內(nèi)容作為每行記錄的第1域、FILE2的內(nèi)容作為第2域??梢允褂?d設(shè)置域分隔符paste -d: FILE1 FILE2。

      paste命令默認是將一個文件按列粘貼的,-s選項可以實現(xiàn)將一個文件按行粘貼。

      ls | paste -d" " - - - -,從標準輸入中讀取數(shù)據(jù)時"-"選項才起作用,"-"表示讀取1次標準輸入數(shù)據(jù)即讀取到標準輸入數(shù)據(jù)中的一個域,- - - - 每行顯示4個文件名。

(6)split命令

split命令用于將大文件切割成小文件,split可以按照文件的行數(shù)、字節(jié)數(shù)切割文件,并能在輸出的多個小文件中自動加上編號。split命令格式:splite [選項] 待切割的大文件 輸出的小文件。

      split -2 a.txt final.txt,按2行對a.txt進行切割,每2行記錄切割成1個文件。split命令在final.txt后面自動加上編號以區(qū)分不同的小文件,編號為aa~zz。

      split -b100 a.txt,-b選項在切割文件時僅考慮了文件大小并未考慮記錄的完整性。split -C100 a.txt,按100B切割a.txt,按-C并不嚴格按照100B的大小進行切割,而是在切割時盡量維持每行的完整性。

(7)tr命令

tr命令實現(xiàn)字符轉(zhuǎn)換功能,類似于sed命令,tr能實現(xiàn)的功能sed命令都可以實現(xiàn)。tr [選項] buffer1 buffer2 < outputfile,其選項有三個,它只能從標準輸入讀取數(shù)據(jù)。

tr -d A-Z < a.txt,刪除a.txt文件中所有的大寫字母。

tr -d "[\n]" < a.txt,刪除a.txt文件中所有的換行符。

tr -s "[\n]" < a.txt,將重復(fù)出現(xiàn)的換行符壓縮成一個換行符。

tr命令也可以加上buffer1和buffer2,將buffer1用buffer2來替換,tr "[a-z]" "[A-Z]" < a.txt,將a.txt中的小寫字母替換成大寫字母。

(8)tar命令

tar命令是linux的歸檔命令,實現(xiàn)linux系統(tǒng)文件的壓縮和解壓縮。tar [選項] 文件名或目錄名,tar的常用選項如下:

tar -cf a.tar *.txt,將所有的.txt結(jié)尾的文件放入壓縮包a.tar。-c表示創(chuàng)建新的包,-f通常是必選選項。

tar -tf a.tar,查看a.tar壓縮包的內(nèi)容。-t列出包內(nèi)容。

tar -rf a.tar log*,將以log開頭的文件添加到a.tar中,-u選項也可用于為包添加新的文件,-u選項完全能代替-r選項。

解壓非gzip格式的壓縮包:tar -xvf 壓縮包名稱

解壓gzip格式的壓縮包:tar -zxvf 壓縮包名稱

 四、總結(jié)

(1)字符串處理和文本處理命令經(jīng)常出現(xiàn)在各種shell腳本程序中,應(yīng)熟練地掌握這些命令。

(2)sort、uniq、join、cut、paste、split、tr和tar與grep、sed、awk構(gòu)成了linux文本處理的所有命令和工具。

(3)該文僅其向?qū)В瑢γ畹脑敿氝x項功能還須參考相應(yīng)的文檔。

到此這篇關(guān)于shell字符串匹配的實現(xiàn)的文章就介紹到這了,更多相關(guān)shell字符串匹配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • shell函數(shù)內(nèi)調(diào)用另一個函數(shù)(不帶返回值和帶返回值)

    shell函數(shù)內(nèi)調(diào)用另一個函數(shù)(不帶返回值和帶返回值)

    本文主要介紹了shell函數(shù)內(nèi)調(diào)用另一個函數(shù)(不帶返回值和帶返回值),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 詳解Linux命令中的正則表達式

    詳解Linux命令中的正則表達式

    正則表達式是一套由多個元字符組成的模糊查找模式,使用正則表達式可以快速查找和定位文本中指定的內(nèi)容。接下來通過本文給大家介紹Linux命令中的正則表達式,需要的朋友參考下吧
    2017-02-02
  • shell腳本中$符號的命令使用匯總

    shell腳本中$符號的命令使用匯總

    這篇文章主要介紹了shell腳本中$符號的使用示例,幫助大家更好的理解和學(xué)習(xí)shell 語言的用法,感興趣的朋友可以了解下
    2020-11-11
  • bash shell命令行選項與修傳入?yún)?shù)處理

    bash shell命令行選項與修傳入?yún)?shù)處理

    本文介紹了bash shell命令行參數(shù)與命令行選項的操作方法,有關(guān)shell 命令行參數(shù)的實例教程,有需要的朋友參考下。
    2014-04-04
  • Shell腳本統(tǒng)計文件行數(shù)的8種方法

    Shell腳本統(tǒng)計文件行數(shù)的8種方法

    這篇文章主要介紹了Shell腳本統(tǒng)計文件行數(shù)的8種方法,本文講解了獲取單個文件行數(shù)、獲取特定目錄所有文件的行數(shù)兩種需求共計8種方法,需要的朋友可以參考下
    2015-03-03
  • Shell腳步攻略之管道重定向基礎(chǔ)

    Shell腳步攻略之管道重定向基礎(chǔ)

    管道是為了解決進程間通信問題而存在,它可以讓兩個進程之間的數(shù)據(jù)進行傳遞,將一個進程的輸出數(shù)據(jù)傳遞給另一個進程作為其輸入數(shù)據(jù)
    2017-08-08
  • 對用戶輸入的判斷的shell實現(xiàn)代碼

    對用戶輸入的判斷的shell實現(xiàn)代碼

    今天的案例是將 對用戶輸入的判斷的shell腳本,需要的朋友可以參考下
    2016-08-08
  • shell腳本中case條件控制語句的一個bug分析

    shell腳本中case條件控制語句的一個bug分析

    在shell腳本中,發(fā)現(xiàn)case語句的一個問題。就是指定小寫字母[a-z]和大寫字母[A-Z]的這種方法不管用了
    2013-11-11
  • Shell腳本判斷Linux系統(tǒng)是32位還是64位的幾種方法分享

    Shell腳本判斷Linux系統(tǒng)是32位還是64位的幾種方法分享

    這篇文章主要介紹了Shell腳本判斷Linux系統(tǒng)是32位還是64位的幾種方法分享,本文共給出了4種方法實現(xiàn)系統(tǒng)位數(shù)在判斷,需要的朋友可以參考下
    2014-12-12
  • bash腳本截取字符串的兩種方法

    bash腳本截取字符串的兩種方法

    本文主要介紹了bash腳本截取字符串的兩種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評論