shell指令碼應用(四)

2022-07-11 10:15:07 字數 4140 閱讀 6165

--正則--

基礎正則

^word     ##搜尋以word開頭的 vi/vim中 ^ 一行的開頭

word$     ##搜尋以word結尾的 vi/vim中 $ 一行的結尾

^$        ##表示空行

.         ##代表且只能代表任意乙個字元

\         ##例:\. 只代表點本身,轉義符號,讓有特殊身份意義的字元,脫掉馬甲,還原

\n        ##換行符

\r        ##匹配回車

\w         ##匹配任意乙個字元和數字

*         ##重複0次或多次前面的乙個字元

.*        ##匹配所有字元。例:^.* 以任意多個字元開頭,.*$以任意多個字元結尾

[abc]     ##匹配字符集內的任意乙個字元

[^abc]    ##匹配不包含 ^ 後的任意字元的內容。中括號裡的 ^ 為取反

[1-9]     ##表示匹配括號內的範圍內的任意字元

a\  ##重複n到m次前乙個重複的字元。若用egrep、sed -r可以去掉斜線

\    ##重複至少n 次前乙個重複的字元。若用egrep、sed -r可以去掉斜線

\     ##重複n 次前乙個重複的字元。若用egrep、sed -r可以去掉斜線

\\    ##重複少於m次

注:egrep,grep –e或sed –r 過濾一般特殊字元可以不轉義

擴充套件正則(egrep或grep -e)

+          ##重複一次或一次以上前面的乙個字元

?          ##重複0次或一次前面的乙個字元

|          ##或者的意思,用或的方式查詢多個符合的字串

()         ##找出括號內的字串

grep awk sed 語法

(一)grep

grep [選項] [條件表示式] 目標檔案

例如:cat /proc/meminfo |grep -e mem -e cache -e swap     ##檢視系統記憶體、快取、交換分割槽-e的作用是匹配多個表示式

grep -r -o -n -e  '[a-z0-9_]+\@[a-z0-9_]+\.[a-z]' /etc/     ##查詢/etc目錄下的所有檔案中的郵件位址;-r遞迴,-n表示匹配的行號,-o只輸出匹配內容,-e支援擴充套件正規表示式,

grep -r -c 'hostname' /etc/ |grep -v "0$"     ##查詢/etc/目錄下檔案中包含「hostname」的次數,-c統計匹配次數,-v取反

grep -r -l 'hostname' /etc/           ##查詢包含「hostname」的檔名,-l顯示匹配的檔名,-l顯示不匹配的檔名

dmesg | grep -n --color=auto 'eth'       ##查詢核心日誌中eth的行,顯示顏色及行號

dmesg | grep -n -a3 -b2 --color=auto 'eth'     ##用 dmesg 列出核心資訊,再以 grep 找出內含 eth 那行,在關鍵字所在行的前兩行與後三行也一起找出出來顯示

cat /etc/passwd |grep -c bash$         ##統計系統中能登入的使用者的個數

touch /tmp/.txt   ##建立測試檔案,以下三條命令是一樣的效果,匹配檔名123,可以包含1個到多個

ls |grep -e '(123)+'

ls |grep '\(123\)\+'

ls |egrep '(123)+'

ps -ef |grep -c httpd             ##統計httpd程序數量

grep -c 4 'games' --color /etc/passwd       ##顯示games匹配的「-c」前後4行

grep ^adm /etc/group             ##檢視adm組的資訊

ip a |grep -e '^[0-9]' |awk -f : ''     ##獲取網絡卡名稱

ifconfig eth0 |grep -e -o 'inet addr:[^ ]*' |grep -o '[0-9.]*'   ##擷取ip位址,[^ ]*表示以非空字元作為結束符,[0-9.]*表示數字和點的組合

ip a |grep inet |grep eth0 |grep -o "inet[^/]*" |grep -o "[0-9.]*"  ##擷取ip位址

ifconfig eth0 |grep -i hwaddr |awk ''   ##擷取mac位址

ip a |grep -a 3 "eth0" |grep link/ether |grep -o "ether[^r]*" |grep -o -e "[0-9a-f:]+"|grep -e "[0-9a-f:]$"      ##擷取mac位址

grep "^m" oldboy.log       ##過濾輸出以m開頭的行

grep "m$" oldboy.log

grep -vn "^$" oldboy.log       ##過濾空行

grep -o "0*" oldboy.log

grep -o "oldb.y" oldboy.log

grep "\.$" oldboy.log       ##以.結尾的行

grep "0\" oldboy.log       ##重複三次

(二)sed

語法:sed 選項  『內容』  檔名

選項:-n 抑制自動列印pattern space,sed預設輸出全部,-n用於取消預設輸出

-i 編輯檔案

-r 支援擴充套件正規表示式

1.改:

語法:sed '/正則匹配條件/s/old/new/g' 檔案

sed 's/dhcp/static/g' /etc/sysconfig/network-scripts/ifcfg-eth1 ##只是顯示,不修改

sed -i 's/dhcp/static/g' /etc/sysconfig/network-scripts/ifcfg-eth1 ##只修改,不顯示

sed -i 's/dhcp/static/g' ip ##將所有的dhcp替換為static

sed -i '/^ip1/s/static/dhcp/g' ip ##將ip1開頭的行替換

sed -i '2s/static/dhcp/g' ip ##指定特定行號2行替換

cat -n /etc/selinux/config ##檢視並顯示行號

sed -i '7s/disabled/enforcing/g' /etc/selinux/config ##開啟selinux

2.刪:

語法:sed '/表示式/d' 檔案

vim ip ##新增空行

sed '/^$/d' ip ##刪除空行並顯示在螢幕上

sed -i '/ip1/d' ip ##刪除包含ip1的行

sed -i '/^ip2/d' ip ##刪除以ip2開頭的行

sed -i '2d' ip ##刪除第二行

3.增:

語法:sed ' /表示式/a "需要新增的文字"' 檔案

sed 'a ip3=static' ip ##每一行後都加上ip3=static

sed '3a ip3=static' ip ##只在第3行後加上ip3=static,並顯示不修改

sed '3i ip3=static' ip ##只在第3行前加上ip3=static,顯示不修改

sed -i '3a ip3=static' ip ##修改,不顯示

sed -i '/^ip3/a "test add"' ip ##在以ip3開頭的行後新增

(三) awk

awk [選項] '模式' 檔案1 檔案2 ...

選項: -f   指定輸入分隔符,可以是字串或正規表示式

常用動作: print、printf

匹配範圍(ranges):指定的匹配範圍,格式為part1,part2(例如$1,$2)

awk的變數:

awk變數:

fs:列分隔符,預設位空白

rs:行分隔符,預設位換行符

ofs:輸出列分隔符

ors :輸出行分隔符

awk內建變數:

nr:處理中行數

fnr:單個檔案的行數

nf:列的個數

shell指令碼應用(四)

shell環境根據命令執行後的返回狀態值 來判斷是否執行成功,當返回值為0是表示成功,否則 非0值 表示失敗或者異常。使用專門的測試工具 test命令,可以對特定條件進行測試,並根據返回值來判斷條件是否成立 返回值為0時表示條件成立 使用test測試命令時,包括以下兩種形式。test 條件表示式 或...

Shell指令碼應用

shell script shell指令碼與windows dos下的批處理相似,也就是用各類命令預先放入到乙個檔案中,方便一次性執行的乙個程式檔案,主要是方便管理員進行設定或者管理用的。但是它比windows下的批處理更強大,比用其他程式設計程式編輯的程式效率更高,它使用了linux unix下的...

shell指令碼基本應用

chmod x hello.sh 給檔案增加執行許可權 hello.sh 執行指令碼 sh hello.sh 以sh執行指令碼 bash hello.sh 以bash執行指令碼 source hello.sh 以source執行指令碼,該指令碼檔案可以無 執行許可權 if有三種表示式 1.if fi...