Linux 三劍客之grep
搭配命令-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