linux中find命令、正則表達式、三劍客之grep基本使用


image

一、find命令的基本使用

  • find 命令主要用於查找目錄和文件,可以指定多種參數進行匹配

  • 用法:find +查找路徑 +命令參數 [輸出形式]

  • 查找路徑:告訴find在哪查找

  • 命令參數:指定要查找的文件屬性,屬性包括多種,類型、名稱、大小、修改時間等等

1、常用的參數

參數:
	-name : 按照文件的名字查找文件
		* :通配符
	-iname :  按照文件的名字查找文件(忽略大小寫)
	-size : 按照文件的大小查詢文件
		+	: 大於
		-	: 小於
		沒符號 : 等於

	-mtime : 按照修改時間去查詢
		+(可以省略) : n 天以前
		- 			: n 天以內
	-atime
	-ctime 

	-user :按照用戶的屬主查詢
	-group : 按照用戶的屬組查詢
	-type : 按照文件的類型查詢
		d : 文件夾
		l : 鏈接文件
		s : 套接字文件
		p : 管道文件
		c : 字符文件
		b :磁盤文件
		f : 普通文件

	-perm : 按照文件的權限查詢
	-inum : 根據index node號碼查詢

	-a : 並且(可以省略,默認時並且)
	-o : 或者
	-maxdepth : 查詢的目錄深度(必須放置與第一個參數位) 

	-exec : 將find處理好的結果交給其他命令繼續處理。
	
	知識儲備:
	dd : 生成文件
		if 		:從什么地方讀
		of 		: 寫入到什么文件
		bs 		: 每次寫入多少內容
		count 	: 寫入多少次

案例:

find . -maxdepth 1 -name "1.txt"  # 直接指定文件名查找 ,-maxdepth 1表示最大查找層級為一級目錄

img

find . -maxdepth 1 -name "*.txt"  # 在當前目錄下查找.txt結尾的文件

img

find . -maxdepth 1 -name "*.txt"  # 在當前目錄下查找.txt結尾的文件

img

find . -maxdepth 1 -name "[0-9]*.txt"  # 查找以數字開頭的文件

img

find . -maxdepth 1 -mtime -5  # 查找當前目錄下,5天之內有修改過的文件

find . -maxdepth 1 -mtime +5  # 查找當前目錄下,修改時間超過5天的文件

find . -maxdepth 1 -type d  # 在當前目錄中查找類型是目錄的文件,最大查找層級一級目錄(會查找隱藏的目錄)

img

案例知識: xargs 將管道前命令的執行結果當作參數逐個傳遞后管道后的命令

ls [a-z].txt | xargs -n1 -i{} mv {} {}.bak   # 將當前目錄中以單個字母命名的txt文件增加一個.bak后綴,-n1意思是一個一個對象的去處理,-i{} 把前面的對象使用{}取代,mv {} {}.bak 相當於 mv a.txt a.txt.bak

img
image

二、正則表達式

  • 正則表達式是一種字符模式,用於在查找過程中匹配制定的字符

    • 元字符通常在Linux中分為兩類:Shell元字符,由Linux Shell進行解析;

    • 元字符通常在Linux中分為兩類:Shell元字符,由Linux Shell進行解析;

    • 正則表達式一般以文本行進行處理

  • 正則表達式元字符

教你3分鍾搞定Linux正則表達式教你3分鍾搞定Linux正則表達式

特殊的元字符

字符 說明
IFS 由 或 或 三者之一組成(我們常用 space )
CR 由 產生
= 設定變量
$ 取變量值或取運算值
> 重定向 stdout
< 重定向 stdin
| 管道符號管道’|'可將命令的結果輸出給另一個命令作為輸入之用:
& 重導向 file descriptor ,或將命令置於背景執行
( ) 將其內的命令置於 nested subshell 執行,或用於運算或命令替換
{ } 將其內的命令置於 non-named function 中執行,或用在變量替換的界定范圍
; 在前一個命令結束時,而忽略其返回值,繼續執行下一個命令
&& 在前一個命令結束時,若返回值為 true,繼續執行下一個命令
|| 在前一個命令結束時,若返回值為 false,繼續執行下一個命令
! 運算意義上的非(not)的意思
# 注釋,常用在腳本中
\ 轉義字符,去除其后緊跟的元字符或通配符的特殊意義

擴展的正則表達式

教你3分鍾搞定Linux正則表達式教你3分鍾搞定Linux正則表達式

案例:

	案例1:在/etc/passwd文件中,匹配以ftp開頭的行
		grep '^ftp' /etc/passwd

	案例2:在/etc/passwd文件中,匹配以bash結尾的行
		grep 'bash$' /etc/passwd

	案例3:匹配本機中有哪些ip
		ip a | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'

	案例4:要求將/etc/fstab中的去掉包含 # 開頭的行,且要求 # 后至少有一個空格
		grep -vE '^#\ +' /etc/fstab

	案例5:找出文件中至少有一個空格的行
		grep -E '\ +' xxx

	案例6:將 nginx.conf 文件中以#開頭的行和空行,全部刪除 
		grep -vE '^\ *#|^$' /etc/nginx/nginx.conf

image

三、linux三劍客之grep

  • Linux 最重要的三個命令在業界被稱為三劍客,它們是:awksedgrep

    • 我們在使用 Linux 系統中,grep 命令的使用尤為頻繁,熟練掌握 grep 的常見用法,能夠極大地提高你的工作效率。

    • grep 命令是一種強大的文本搜索工具,它能使用正則表達式,按照指定的模式去匹配,並把匹配的行打印出來。需要注意的是,grep 只支持匹配而不能替換匹配的內容

# linux三劍客之一,文本過濾器(根據文本內容過濾文件)。

語法格式:
	grep [參數] [匹配規則] [操作對象]

案例:文章中的示例 需要一個樣例文件,文件內容如下

img

1. 把包含 syslog 的行過濾出來

img

2. 把以 ntp 開頭的行過慮出來

img

3. 把匹配 ntp 的行以及下邊的兩行過濾出來

img

4. 把包含 syslog 及上邊的一行過濾出來

img

5. 把包含 syslog 以及上、下一行內容過濾出來

img

6. 過濾某個關鍵詞,並輸出行號

img

7. 過濾不包含某關鍵詞,並輸出行號

img

8. 刪除掉空行

img

9. 過濾包含 root 或 syslog 的行

img

10. 查看當前目錄中包含某關鍵詞的所有文件(這個很有用)

img

參數:
	-n : 過濾文本時,將過濾出來的內容在文件內的行號顯示出來
	-A : 匹配成功之后,將匹配行的后n行顯示出來
	-B : 匹配成功之后,將匹配行的前n行顯示出來
	-C : 匹配成功之后,將匹配行的前后各n行顯示出來
	-c :  只顯示匹配成功的行數
	-o :  只顯示匹配成功的內容
	-v :  反向過濾
	-q :  安靜模式,不輸出任何信息,腳本中常用
	-i : 忽略大小寫
	-l :  匹配成功之后,將文本的名稱打印出來
	-R|-r : 遞歸匹配 
	--color:以顏色突出顯示匹配到的字符串
	-E : 使用拓展正則   等價於  egrep

知識儲備:
	$? : 上一行命令執行的結果,0代表執行成功,其他數字代表執行失敗。
	wc :  匹配行數
		-l : 打印匹配行數
		-c : 打印匹配的字節數
	

在/etc目錄下,有多少個文件包含root。
	grep -rl 'root' /etc/ | wc -l
  • 與 grep 相似的工具還有 egrepfgrep,實用性並不強,其功能完全可以通過 grep 的擴展參數來實現,所以就不再擴展。


免責聲明!

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



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