Linux 三劍客之grep

Linux 三劍客之grep

image


搭配命令-find

find命令是根據文件的名稱或者屬性查找文件,並不會顯示文件內容

  • 格式:find [查找範圍] [參數]

  • 參數:
    | 參數 | 描述 |
    | ——– | ———————————————————— |
    | -name | 按照文件的名字查找文件 |
    | -iname | 按照文件的名字查找文件(忽略大小寫) |
    | -size | 按照文件的大小查詢文件(搭配size使用得符號:+表示大於,-表示小於,沒符號表示等於) |
    | -mtime | 按照修改時間去查詢 |
    | -atime | 按照訪問時間查找 |
    | -ctime | 按照修改屬性時間查找 |
    | -user | 按照用戶的屬主查詢 |
    | -group | 按照用戶的屬組查詢 |

知識補充:

-exec : 將find處理好的結果交給其他命令繼續處理。

dd if=/dev/zero of=100.txt bs=10M count=10
dd : 生成文件
if 		:從什麼地方讀
of 		: 寫入到什麼文件
bs 		: 每次寫入多少內容
count 	: 寫入多少次

案例:

案例1:查詢/etc目錄下hosts文件
[root@localhost ~]# find /etc/ -name 'hosts'
/etc/hosts    
案例2:查詢/etc目錄下名稱中包含hosts文件
[root@localhost ~]# find /etc/ -name '*hosts*'

案例3:要求把/etc目錄下,所有的普通文件打包壓縮到/tmp目錄
[root@localhost /tmp]# tar -czPf /tmp/etcv2.tar.gz `find /etc/ -type f | xargs`

# 知識補充:
``:表示得是提前執行命令,然後把結果交給其他命令處理

三劍客之grep:

grep是Linux三劍客之一,區別find命令,grep是全面搜索,可以過濾輸出文本內容,是一種強大的文本搜索工具,通常和正則一起使用,並把匹配的行打印出來。

  • 格式:grep [參數] [匹配規則] [操作對象]
  • 參數:
參數字符 功能描述
-n 過濾文本時,將過濾出來的內容在文件內的行號顯示出來
-c 只顯示匹配成功的行數
-o 只顯示匹配成功的內容
-v 反向過濾(類似-o的取反操作)
-q 靜默輸出(不顯示,可以通過echo $?查看結果真假)
-i 忽略大小寫
-l 匹配成功之後,將文本的名稱打印出來
-R/ -r 遞歸匹配
-E 使用拓展正則 等價於 egrep
-A<顯示列數> 除了顯示符合範本樣式的那一行之外,並顯示該行之後的內容。
-B 除了顯示符合範本樣式的那一行之外,並顯示該行之前的內容。
-C<顯示列數>或-<顯示列數> 除了顯示符合範本樣式的那一列之外,並顯示該列之前後的內容。
  • 知識拓展

    知識儲備:
    	$? : 上一行命令執行的結果,0代表執行成功,其他數字代表執行失敗。
    wc :  匹配行數
    	-l : 打印匹配行數
    	-c : 打印匹配的位元組數
    在/etc目錄下,有多少個文件包含root。
     grep -rl 'root' /etc/ | wc -l
    	
    

正則表達式:

Linux中使用正則和python一樣

  • 以前總結博文👉:[正則表達式](python 正則表達式 – HammerZe – 博客園 (cnblogs.com))

  • 值得注意的是,在Linux中,使用正則,分為普通正則表達式拓展正則表達式

  • 普通正則表達式:

    ^ : 以某字符開頭
    $ : 以某字符結尾
    . : 匹配除換行符之外的任意單個字符
    * :匹配前導字符的任意個數
    [] : 某組字符串的任意一個字符
    [^]      : 取反
    [a-z]    : 匹配小寫字母
    [A-Z]    : 匹配大寫字母
    [a-zA-Z] : 匹配字母
    [0-9] 	 : 匹配數字
    \ 		: 取消轉義
    ()		: 分組
    \n : 代表第n個分組
    
  • 拓展正則表達式

    {}     :匹配的次數
    {n}		: 匹配n次
    {n,}	:至少匹配n次
    {n,m}	:匹配 n 到 m 次
    {,m}	:最多匹配m次
    +      :匹配至少有一個前導字符
    ?      : 匹配一個或零個前導字符
    |      :或
    
  • 案例如下:

    案例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}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
    	或
    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

【待續,俺先去搖頭了~】