shell文本處理三劍客(awk sed grep)

一.grep:文本過濾器

根據正則表達式來工作,由正則表達式或者字符及基本的文本字符所編寫的過濾條件

tr 'a-z' 'A-Z' < file          ###把passwd中的小寫轉換爲大寫


^x      ###以x開頭的

x$      ###以x結尾的


-v      ###反選

grep  nologin$  -v  passwd      ###顯示能登陸的用戶


-E   ^root|root$   ###root在開頭的或者在結尾的,|或運算時擴展的要加上-E,用法和grep一樣   

grep -n3 root   ###搜索root前後各3行


grep -A3 root   ###搜索root所在行的後三行


grep -B3 root   ###搜索root所在行的前三行


grep -i  root   ###忽略大小寫


grep x..y       ###x和y之間有兩個字符的


*       ###字符出現任意次

     ###字符出現0到1次

+       ###字符出現1到任意次          

 

{n}       ###字符出現n次


{m,n}     ###字符最少出現m次最多出現n次

{0,n}     ###字符出現0到n次

{m,}      ###字符至少出現m次


(xy){n}   ###xy出現n次

grep  \<關鍵字\>    ##搜索關鍵字


二.sed:文本編輯器

用來操作純ASCII碼的文本,把當前處理的行存儲在臨時緩衝區,可以僅僅處理指定的行,符合條件的處理,不符合的不處理,完成後把緩衝區的內容輸出到屏幕,緊接着處理下一行,直到文件結束

p   ##顯示

d   ##刪除

a   ##添加

c   ##替換

w   ##寫入

i    ##插入

-n   ##安靜模式,只有經過sed處理的那行纔會顯示出來

(1)p   ##顯示


sed  -n  '2,6!p'  passwd    ##2行和6行不顯示


(2)d   ##刪除

sed  '2,6!d'  passwd     ##2到6行的不刪除

(3)c   ##替換

-i    ###修改完成之後就保留在原文件裏


替換httpd默認端口的腳本



(4)a   ##添加


(5)w   ##寫入


sed '1r test' passwd    ##把test的內容添加到passwd文件的第二行


sed  -n '/root/='  passwd    ##把root所在行行號打印出來


(6)sed的其他用法

sed -f rule test              ###把策略寫在rule文件中直接修改文加test


sed '=' passwd | sed 'N;s/\n//g'   ###給每一行標號,並且刪除換行符


sed  -n  '$p'  test     ###輸出最後一行

sed  -n  '1p'  test     ###輸出第一行


sed  -e  '=;!G'  test   v ##-e同時執行兩個策略,加行號,並且把每行分開


.awk

awk:文本報告生成器,逐行處理文本,支持在處理第一行之前,做一些準備工作,以及在處理完後做一些總結性質的工作

BEGIN{ }:讀入第一行文本之前執行,一般用來初始化操作

{ }:逐行讀入進行處理

END{ }:處理完最後一行後執行,一般由來輸出處理結果

awk  -F : '$7~/bash$/{print $0}' /etc/passwd        ###第7列是以bash$結尾的輸出這行($0 ##表示輸出此行)


awk  -F : '$7~/bash$/{print $1}' /etc/passwd        ###第7列是以bash$結尾的輸出第一列,並且統計能登陸用戶的個數


awk -F : 'BEGIN{i=0}/bash$/{i++;print $1}END{print i}' passwd   ###查找用戶是否能登錄,並輸出登錄用戶的用戶名和個數


awk 'NR>=3&&NR<=5{print}'   /etc/passwd    ##輸出在第3行到第5行之間的行


awk -F : 'BEGIN{i=0}$7~/bash$/{i++;print}END{print i}' passwd   ###查找用戶是否能登錄,並輸出登錄用戶的信息和個數


awk 'BEGIN{a=4;print a+2}'      ##awk也可以做運算


awk  -F : 'NR==1{print}' /etc/passwd           ###恆定輸出第一行

抓取IP:


awk  -F : '{print  $1," is readlly"}'   /etc/passwd    ##添加輸出的字符串 


補充:

fmt  -s  -w 10 <<EOF  ##一行只能輸出10個字符,否則自動換行


tail -n  10 -f /var/log/messages        ##動態查看日誌


awk  grep  sed其三者的應用豐富多樣,文本處理是比較靈活的,只要符合規則,可以任意組合;面對不同的問題,寫出多樣的,符合實際情況的策略

 


發佈了59 篇原創文章 · 獲贊 10 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章