Linux shell基礎(四)正則表達式與grep命令 beta

1、正則表達式

以前學習find命令時,就已經接觸過一些簡單的正則,那麼咱們如今來學習一些複雜的正則。首先,咱們仍是來複習什麼是正則表達式,看這個教程先,必定要多看幾遍,至少知道正則大概長什麼樣子。(轉載至https://deerchao.net/tutorials/regex/regex.htm )正則就是有規律的一串字符串,用來描述一個特定的內容,正則適合用來處理字符串,不太適合處理數學邏輯。學好正則對編寫shell腳本有很大的好處,全部的shell腳本大部分都涉及到正則表達式。各類編程工具中也須要使用正則。php

用grep sed awk去處理字符串
能不能寫好shell腳本php
ngix配置文件中也有正則
正則核心符號
。一個任意字符正則表達式

  • 個*
    ? 零個或1個
  • 一個或多個
    ^ 開頭
    # 末尾

2、grep命令

(一)grep命令簡介

用於過濾文件中的字符,(global search regular expression(RE) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。系統自己經過/etc/profile.d目錄下的colorgrep.sh文件作了別名==grep --color,可以方便的顯示找到的行。

用法: grep [選項]... PATTERN [FILE]...
grep -cniv ‘關鍵字(正則)’ 文件路徑
選項
-i 不區分大小寫,默認狀況下grep不區分關鍵字大小寫
-c 行數
-n 顯示關鍵詞所在行號
-v取反(使用較多)
-r 遍歷全部層級子目錄
-A後面跟數字,過濾出符合要求的行以及下面的n行
-B後面跟數字,過濾符合要求的行以及上面的n行
-C後面跟數字,過濾符合要求的行以及上下各n行shell

擴展正則 grep -E ==sed -r ==awkexpress

反覆練習,掌握正則表達式
首先作個準備工做,把/etc/passwd文檔拷貝到其餘路徑下,如/tmp下作試驗編程

(二)基本用法示例

一、過濾出關鍵字root所在的行並顯示行號。ssh

grep -n 'root' /etc/passwdide

Linux  shell基礎(四)正則表達式與grep命令 beta

能夠看到有顏色標識關鍵字。工具

二、統計某一關鍵字出現的行數學習

grep -c 'nologin' passwd.net

Linux  shell基礎(四)正則表達式與grep命令 beta

下面那個15就是說nologin這個關鍵字出現了15次

三、搜索某一關鍵字出現的行,而後把沒有出現關鍵字的行過濾出來

grep -vn 'nologin' passwd

Linux  shell基礎(四)正則表達式與grep命令 beta

四、搜索整個文件夾,在文件內容中招root。(注意與find命令找到的東西的區別)

grep -r 'root' /etc

Linux  shell基礎(四)正則表達式與grep命令 beta

紫色是文件的路徑,搜索出來的東西不少,grep把/etc下全部包含root的文件中的root字所在的行和所在的文件信息都列了出來。

五、-ABC 做用演示,能列出關鍵字所在的行和臨近的行。

grep -A2 'root' passwd
grep -B2 'root' passwd
grep -C2 'root' passwd

Linux  shell基礎(四)正則表達式與grep命令 beta

Linux  shell基礎(四)正則表達式與grep命令 beta

Linux  shell基礎(四)正則表達式與grep命令 beta
-C選項會把搜到的行的附近的行都列出來,固然若是搜索的目標在頭上或者文尾,就不會列相應的行。

grep+正則表達式(regexp)用法舉例

命令寫法:grep -(cirvnABC) 'regexp' 文件或目錄路徑

精髓在regexp的寫法,如何正確的把想要的東西用正則表達出來。

一、把含有0到9十個數字任意一個字符的行列出來

grep '[0-9]' passwd

Linux  shell基礎(四)正則表達式與grep命令 beta

取反再搜索下
沒了,說明passwd文件中每一行都帶有數字
Linux  shell基礎(四)正則表達式與grep命令 beta
這裏說明[0-9]==[0123456789]

二、把不以#號開頭的行打印出來,
這條命令常常用於查看程序或者系統的配置文件,這種文件常常有大段的以'#'開頭的註釋行,直接看很麻煩。

grep -vn '^#' /etc/ssh/sshd_config

Linux  shell基礎(四)正則表達式與grep命令 beta

仍是有空行,咱們要再把空行過濾掉。

grep -vn '^#' /etc/ssh/sshd_config|grep -v '^$'

三、顯示test.txt文檔中含有r.o關鍵字的行

grep 'r.o' test.txt

Linux  shell基礎(四)正則表達式與grep命令 beta

.號表示任意一個字符,a-z,A-Z,0-9,特殊號等等。

四、搜索test.txt中形如'r*o'的行

grep 'r*o' test.txt

Linux  shell基礎(四)正則表達式與grep命令 beta

注意這個正則的匹配結果,「r*o」能夠表明的東西是隻要以零個或任意多個r開頭o結尾的字符,ro確定能夠,o也能夠由於他表示0個r和1個o,rrro,rro這些確定能夠。

相關文章
相關標籤/搜索