--正則-- 基礎正則 ^word ##搜索以word開頭的 vi/vim中 ^ 一行的開頭 word$ ##搜索以word結尾的 vi/vim中 $ 一行的結尾 ^$ ##表示空行 . ##代表且只能代表任意一個字符 \ ##例:\. 只代表點本身,轉義符號,讓有特殊身份意義的字符,脫掉馬甲,還原 \n ##換行符 \r ##匹配回車 \w ##匹配任意一個字符和數字 * ##重復0次或多次前面的一個字符 .* ##匹配所有字符,例:^.* 以任意多個字符開頭,.*$以任意多個字符結尾 [abc] ##匹配字符集內的任意一個字符 [^abc] ##匹配不包含 ^ 后的任意字符的內容,中括號里的 ^ 為取反 [1-9] ##表示匹配括號內的范圍內的任意字符 a\{n,m\} ##重復n到m次前一個重復的字符,若用egrep、sed -r可以去掉斜線 \{n,\} ##重復至少n 次前一個重復的字符,若用egrep、sed -r可以去掉斜線 \{n\} ##重復n 次前一個重復的字符,若用egrep、sed -r可以去掉斜線 \{,m}\ ##重復少于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]{2,4}' /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/{123,123123,456,1234567}.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 : '{print $2}' ##獲取網卡名稱 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 '{print $5}' ##截取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:]{2}$" ##截取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\{3\}" 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 [選項] '模式{動作 ranges}' 檔案1 檔案2 ... 選項: -F 指定輸入分隔符,可以是字串或正則運算式 常用動作: print、printf 匹配范圍(ranges):指定的匹配范圍,格式為part1,part2(例如$1,$2) awk的變數: awk變數: FS:列分隔符,默認位空白 RS:行分隔符,默認位換行符 OFS:輸出列分隔符 ORS :輸出行分隔符 awk內置變數: NR:處理中行數 FNR:單個檔案的行數 NF:列的個數
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/228322.html
標籤:其他
下一篇:什么是shell
