--正則--
基礎正則
^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...