shell指令碼 正規表示式

2021-07-23 10:16:24 字數 1868 閱讀 5774

一、正規表示式

正規表示式是用來描述字串排列和匹配模式的一種語法規則,是字串的模式分割、匹配、查詢和替換操作。

正規表示式是包含匹配,操作字串,如grep,awd,sed,而萬用字元是完全匹配,如ls,find,cp

正則的與萬用字元的不同,如正規表示式aa*,第二個a不起作用,意思是以a開頭的,而萬用字元aa*的話是以aa開頭

^$這個會匹配空白行

1這個表示以數字開頭

[^0-9]這個表示除數字以外

如果要取消某個字元的定義,則用轉義符 「\」

二、cut、awk、sed使用(主要功能)

建立使用者useradd 刪除使用者userdel

grep是行命令,cut是列命令,cut預設製表符tab

df 檢視系統分割槽的情況

cut記憶體切取:df -h |tr -s " "|cut -d " " -f 1,3

tr -s " "將空格壓縮為乙個

printf輸出格式化

printf 『輸入格式』 資料

printf『%s\t』$(cat test6.txt)

管道 | :是資料流的操作 printf不支援這個

還有乙個print命令,在乙個字元預設加上換行;printf是使用者定義,都要自己寫的

awk『條件1,條件2』檔名

條件(pattern):

一般使用關係表示式作為條件

動作(action)

格式化輸出

流程控制

df -h |awk '' 輸出df中第一列和…n與位置變數的$n不同,這裡表示第幾列,0表示

整個檔案

名位置變

量的0表示整個檔名 位置變數的

0表示整個文

件名位置

變數的n表示傳進來的變數

2、printf中的轉義符要用「 」,而不是單引號,原因是它外面已經有了

df -h|grep 「/dev/sda1」|awk 『』|cut -d 「%」 -f 1

記憶體中,名字有"/dev/sda1",擷取它的第五列(不清楚為什麼不行printf),擷取%前的資料

awk預設是空格,插表符,如果要弄:的則需以下操作:

cat /etc/passwd|awk 『begin 』 fs是內建變數符,替換掉

begin在讀取動作前執行

sed

sed 【選項】 『【動作】』 檔名

【選項】:

-n:將後面有關運算元列印在螢幕上,若沒有,則全部列印

-e:對允許輸入命令進行多條sed編輯

-i:將結果修改原檔案

【動作】:

a 追加 c一行替換 i插入 d刪除 p列印 s字元替換

sed -n 『2p』 test1

sed 『2c hello world』 test1

sed -e 『s/xy/hello/g;s/th/hello/g』 test1 唯一確認的,所以s前可以不用加入行號。

三、字元處理命令

sort、wc

1、排列命令 sort sort [選項] 檔名

【選項】 :-f 忽略大小寫 -n 以數值排列,預設字串

-r 取反排列,預設從小到大 -t 指定分隔符,預設製表符

-k n[,m] 排序範圍從第n個字段開始到m個

2、統計命令wc wc 【選項】 檔名

【選項】 :-l 行數 -w單詞數 -m字元數

0-9 ↩︎

shell 指令碼 正規表示式

字元類 character class 如上例的x和 y,它們在模式中表示乙個字元 但是取值範圍是 一類字 符中的任意乙個。數量限定符 quantifier 郵件位址的每一部分可以有乙個或多個x字元 ip位址的每一部 分 可以有1 3個y 字元位置限定符 anchor 部分,用普通字元 和 隔 開 ...

shell指令碼 正規表示式

正規表示式分為基礎正則和擴充套件正則,都是為了匹配符合預期要求的字串 只需要記住,對檔案內容或是展示文字的操作都是正則,而對目錄或檔名的操作則都是萬用字元 例如find指令 擴充套件正則包含基礎正則,而且多出了 四個指令 注意這裡的 要和管道符分開 擴充套件正則不需要像基礎正則一樣對某些符號進行轉義...

shell指令碼之正規表示式

一 基礎正規表示式例項 元字元總結 在linux系統中常見的檔案處理工具中grep和sed支援基礎正規表示式。grep命令選項 i 查詢時不區分大小寫 v 查詢時反向輸出,如查詢不包含某些字元的內容 n 表示查詢出結果後顯示行號 這三個選項可以結合使用,如 in 查詢時不區分大小寫並顯示行號。示例 ...