Shell常用工具find,grep,sed,awk,xargs命令


最近學習shell命令,對grep,sed,awk命令有點混亂,故小結一下,鞏固一遍。

注意:find , grep , sed, awk可使用基本正則表達式字符,find,grep,awk也支持擴展的正則表達式元字符,grep使用擴展正則必須結合-E或直接使用egrep命令。

基本正則表達式元字符有:

* 重復前面字符0次或多次 . 匹配任意字符一個,包括空格 ^ 匹配行首,但若在[]內則表示取反
[] 匹配字符集 \{\} 精確匹配 $ 匹配行尾
\{n\} 表示重復前面字符n次 \{n,\} 表示重復前面字符至少n次 \{n,m\} 表示重復前面字符n-m次

擴展正則表達式元字符有:

匹配0個或1個前面的普通字符 + 匹配至少一個前面的字符
() 字符集合 | 或,通常和()一起使用

上述部分元字符在通配時意義會不一樣,通配時如下:

* 任意位任意字符 一個任意字符
^ 取反 {,} 或的關系

一、find命令:

基本格式:find 【路徑】【選項】【操作】

【選項】: -name , -type , -mtime, -size , -perm , -user , -group 等

【操作】:-print , -exec, -ok 

(1)常用選項及意義:

-name :根據文件名查找文件。 如:查找當前目錄下的所有以“.py”結尾的文件(說明:“.”表示當前目錄,“*”正則基本通配符)

-type :根據文件類型進行查找,文件類型有d:目錄     - :普通文件    b:塊設備文件    l:符號鏈接文件      p:管道文件     c:字符設備文件 

如:查找當前路徑下所有的目錄

-mtime :后接+n,表示文件更改時間距今在n天之前,-n表示文件更改距今在n天之內。

如:查找當前路徑下今天修改過的文件

-perm:根據文件權限查找文件。如:查找當前路徑下權限為764的文件,說明:7表示rwx,表示用戶(user)具有可讀可寫可執行權限,6表示rw-表示該用戶所屬屬組(group)具有可讀可寫無可執行權限,4表示r--表示其他用戶(others)僅有可讀權限

-user :根據文件屬主查找文件; -group:根據用戶屬組查找文件    -size : 根據文件大小查找文件   暫不作演示。

(2)操作名稱及其意義

- print: 將匹配到的文件輸出到標准輸出

-exec :  對匹配的文件執行該參數給出的命令,后面接的形式為:“命令” { }  \;固定格式。

-ok:和-exec功能相同,只是在每次執行時會給出提示,讓用戶確定是否執行。

實例如下:

a. -print:查找當前路徑下今天修改過的文件,且文件權限為764的文件

b. -exec :  查找當前路徑下普通文件的詳細信息

c. -ok : 查找當前路徑下普通文件的詳細信息

二、grep命令:一種強大的文本搜索工具,與正則表達式結合使用

基本格式: grep 【選項】【模式】【文件....】

【選項】:常用的有-c,-i, -n ,-l , -w, -x, -r, -b ,-E,-F

-c 只輸出匹配行的數量 -n 列出所有的匹配行,並打印行號 -b 打印匹配行距文件頭部的偏移量,單位:字節 -x 匹配整行 -E 支持擴展正則表達式
-i  不區分大小寫 -l 只列出符合匹配的文件名,而不列出具體匹配行 -w 匹配整詞 -r 遞歸搜索 -F 不支持正則表達式,按字符字面意思匹配

【模式】:可以是字符串,變量,正則表達式,注意模式中包含空格時,需要用雙引號引起來。

實例1:搜索當前路徑下以.py,.txt,.sh結尾的文件中哪些包含hello字符串,要求不區分大小寫搜索,顯示文本行內容及行號。

分析:以.py,.txt,.sh結尾的文件—— “*.{py,txt,sh}”。不區分大小寫,使用-i選項。 顯示文本內容及行號,使用-n。如下兩種方式:

實例2:統計文本中的空行數,住:'^$'匹配空行

 

實例3:

a. 查找所有包含字符串“the”的行,如下,包含they字符的行也打印出來。

b. 精確匹配“the”這個單詞的行

方法一:使用精確匹配\< \>

方法二:使用-w選項。

c. 查找整行文本都是“the”的行:使用-x選項

三、sed命令:流編輯器

基本格式一:sed 【選項】 'sed命令'  輸入文件

基本格式二:sed 【選項】-f  sed腳本文件  輸入文件

基本格式三: ./sed腳本文件  輸入文件

多個編輯命令時:

sed 【選項】 -e  'sed 命令1'    -e  'sed 命令2'   -e  'sed 命令n'

【選項】:

-n : 不打印所有行到標准輸出

-e : 表示將下一個字符串解析為sed編輯命令

-f  : 表示調用sed 腳本

【定位文本方法】:

x:指定行號               x,y:從x到y行              /pattern/ :匹配pattern模式的行                 

/pattern/parttern2/ :匹配包含pattern和parttern2的行      

x,y!:查詢不包括x到y的行       

 x,/pattern/:從模式x到pattern行進行匹配                /pattern/,x :從模式pattern到x行進行匹配

【sed編輯命令】:

常用:

p 打印匹配行 a\ 匹配行后追加
i\ 匹配行前插入 = 打印文件行號
r 從另一個文件讀入 w 寫入到另一個文件
c\ 新文本替換匹配行,整體替換 n 讀取下一個輸入行,用下一個命令處理新的行
s 替換模式替換字符串 y 變換字符
d 刪除定位行 q 第一個模式匹配成功后退出
{} 在定位行執行命令組    

 

 

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM