Shell 中的 正規表示式

2021-06-27 08:45:29 字數 2078 閱讀 8658

常接觸shell指令碼語言的,經常會看到乙個shell命令接一堆亂七八糟的option,類似這樣的sed -e "s/^[^\-]*-//",雖然知道那肯定是乙個邏輯條件組合,但是如果不是熟悉正規表示式的人,絕對看的眼花.

這裡學習記錄一下正規表示式的一些基本用法.

正規表示式也叫正規表示法,就是處理字串的方法,他是以行為單位進行字串癿處理行為, 正則表示法透過一些特殊符號的輔助,

可以讓使用者輕易的達到搜尋  刪除  取代』某特定字串的處理程式!

grep摘取命令為例

grep -n  『jscese』 test.txt

以單引號包含需要搜尋的字串,

單雙引號的區別在於,單引號裡面的內容全當字元處理,如果裡面是其它變數名,也只當作普通字元,二雙引號就不同,具有引用特性

grep -n  'j[sc]ese'  test.txt

中括號代表乙個字元, 所以上面的語句代表會 搜尋 jsese  jcese 這兩種組合可能.

grep  -n  『j[^s]cese'  test.txt   //取中間不是 s 的

grep -n 'j[^a-za-z0-9]cese test.txt //取中間不是a-z a-z 0-9 的,只有是特殊符號的才行了

grep -n '^jscese' test.txt //代表開頭 ,取以jscese開頭的行

使用 ^  在中括號 裡面和外面代表的意義是不一樣的,在裡面代表取反,在外面代表行首

grep   -v  '^$'   test.txt    //取非空的行

行首^直接加行尾$,代表空的一行,-v 就是取非匹配的

grep   -n    'j....e'   test.txt   // 其中每個  .  代表任意的乙個字元

grep -n 『j*』 test.txt // 這個會列出所有的 ,因為 * 代表重複前面的字元 0 次 或者 無數 次, 也就是可能是空

修飾前乙個字元

grep  -n   『js\'   test.txt        // {} 需要跳脫字元轉義 所以在前面加上 \

也是修飾前乙個字元的,這裡代表找以js開頭後面緊接著2個以上s的一行,\ 就代表2到6個之間的都符合

基本的規則就是上面的這些了,詳細的可以去看鳥哥的私房菜,現在來看看開頭的sed -e "s/^[^\-]*-//"

這個是在envsetup,sh 中用來取原始碼編譯型別的,lunch選取的值為selection= full_x86-eng的樣式

通過:

local variant=$(echo -n $selection | sed -e "s/^[^\-]*-//")

可以看到 通過sed命令直接進行編輯,利用sed的s取代動作,後面的模式為:

「s/要被取代的部分/取代的字串/「
可以看到  要被取代的部分為 :^[^\-]*-這代表從頭開始,0個或者多個 非 - 的字元然後以 - 字元結尾的部分, 因為在中 - 具有範圍的意義,所以加了跳脫字元 \

取代部分這裡是空的

所以最後實際上是把   full-x86- 給剔除掉了,餘下eng 賦值給 variant ,這就是工程機的編譯模式.

到這裡正規表示式的入門基本算是完成了,後面有機會分析sed 以及awk 的一些高階用法~

Shell中的正規表示式

1 什麼是正規表示式 1.乙個字符集.這裡的字符集裡的字元表示的就是它們字面上的意思.正規表示式最簡單的情況就是僅僅由字符集組成,而沒有其他的元字元.2.錨.乙個錨指明了正規表示式在一行文字中要匹配的位置,例如 和 就是錨.3.修飾符 它們用於展開或縮小 即是修改了 正規表示式匹配文字行的範圍.修飾...

Shell中的正規表示式

hel o helo hello hellllllo.aa.表示前三個字元可以為任意 第四個和四五個字元要為a 第六個字元可以為任意 任意字元可以是乙個空格 hello 表示匹配以hello開頭的行 roo 表示行首的前三個字元為任意字元 第四到六的字元為roo 第七個字元開始可以重複匹配hello...

shell正規表示式

句點 匹配單字元 1 匹配任意單ascii 字元,可以為字母,或為數字。2 舉例 xc.匹配dexc1t 23xcdf 等,w.w.w.匹配rwxrw rw 行首以 匹配字串或字串行 1 允許在一行的開始匹配字元或單詞。2 舉例 01 匹配0011cx4 c01sdf 等,d 匹配drwxr xr ...