Linux中正則表達式和grep的使用

正則表達式在Linux經常配合grep,sedawk等用于搜尋關鍵字。正則表達式分為正則表達式和擴展正則表達式:
一、正則表達式
1.1 元字符:
.:匹配任意字符   
[]:匹配[]中的任意一個字符
[^]:匹配[]以外的任意字符
[:alpha:]大小寫英文字母
[:digit:]:十進制數字
[:xdigit:]:十六進制數字
[:upper:]:大寫字母
[:lower:]:小寫字母
[:space:]:空格
[:punct:]:標點符號
[:blank:]:空格和制表符(TAB
[:alnum:]:所有字母和數字
[:print:]:可打印字符
[:graph:]:可打印的非空白字符
1.2 位置錨定:

^:錨定行首
$:錨定行尾
^$:空行
^PATTERN$:錨定整行
^[[:space:]]$:空白行
\b PATTERN\b |  \< PATTERN\>:匹配整個單詞
\b | \<:詞首錨定
\b | \>:詞尾錨定
1.3 匹配次數:

*:匹配其前面字符任意次,最少0次,最多不限
.*:匹配任意字符任意次
\{n,m\}:匹配其前面字符最少n次,最多m
\{n\}:匹配其前面字符n
\{n,\}:匹配其前面字符至少n
\{,m\}:匹配其前面字符至多m
\+:匹配其前面字符至少1次,至多無限次
\?:匹配其前面字符0次或1次,最多1
1.4 分組
\PATTERN\\1 \1表示和前面\\)中的內容相同,引用前面的內容
1.5 
|
a \| b:表示ab

二、擴展正則表達式

擴展正則表達式和基本正則表達式差別不大,一下為有差別的部分:
+:匹配其前面字符至少1次,至多無限次
?:匹配其前面字符0次或1次,最多1
{n,m}:匹配其前面字符最少n次,最多m
{n,}:匹配其前面字符至少n
{,m}:匹配其前面字符至多m
{n}:匹配其前面字符n

三、grep命令:用于匹配關鍵字,支持正則表達式

grep [OPTIONS] PATTERN [FILE…]
常用參數:
  -e:同時匹配多個結果,多個結果之間為并列的關系
  -i:忽略大小寫
  -c:匹配統計的行數
  -E:采用擴展正則表達式,相當于egrep
  -o:只顯示匹配到的結果
  -n:顯示行號
  -v:取反
  -C #:顯示匹配結果上下#
  -A #:顯示匹配結果下面#
  -B #:顯示匹配結果上面#
  -w:匹配整個單詞
  -q:靜默輸出,常用在腳本中,取$?的值

四、例題:
1、顯示三個用戶rootmage、wangUID和默認shell
cat /etc/passwd|egrep “^root|^mage|^wang”|cut -d: -f 1,3
2、找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)后面跟一個小括號的行
[root@localhost script]# cat /etc/rc.d/init.d/functions |egrep “^[_[:alpha:]]+\(\)”
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
[root@localhost script]# echo “/etc/rc.d/init.d/function”|egrep -o “/[[:alpha:]]+$”|cut -d”/”
-f2
4、使用egrep取出上面路徑的目錄名
[root@localhost script]# echo “/etc/rc.d/init.d/function”|egrep -o “/.*/”
5、利用擴展正則表達式分別表示0-9、10-99、100-199、200-249、250-255
egrep “[0-9]{1}”
egrep “[0-9]{2}”
egrep “[0-9]{3}”
egrep “2[0-4]{1}[0-9]{1}”
egrep “25[0-5]{1}”
6、顯示ifconfig命令結果中所有IPv4地址
ifconfig  | egrep  -o “([0-9]{1,3}\.){3}[0-9]{1,3}”
7、將此字符串:welcome to  magedu linux 中的每個字符去重并排序,重復次數多的排到前面
[root@localhost script]# echo “welcome to magedu linux”|egrep -o “[[:alpha:]]”|sort|uniq -c|so
rt -rn                    

原創文章,作者:王子豪,如若轉載,請注明出處:http://www.www58058.com/72773

(0)
王子豪王子豪
上一篇 2017-04-08
下一篇 2017-04-08

相關推薦

  • shell 腳本基礎作業

    1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小 #!/bin/bash :<<EOF 顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小 EOF Host_name=`hostna…

    Linux干貨 2016-08-15
  • select循環與菜單的用法

    select循環與菜單的用法 1、select循環主要用于創建菜單,其按數字順序排列并且顯示在標準錯誤輸出上,并顯示PS3提示符,等待用戶輸入選擇內容,用戶一旦輸入菜單中的某個數字,則執行相應菜單中的命令。用戶輸入的內容被保存在內置變量REPLY中。 select的用法: select variable [in list] ; do   …

    Linux干貨 2016-08-21
  • Redis基于Sentinel哨兵高可用方案

    下載最新redis版本,當前最新版本為  2.8.19  2014-12-30 安裝redis 首頁地址:http://redis.io/ 最新穩定版下載地址: http://download.redis.io/releases/redis-2.8.19.tar.gz # tar -xvf redis-2.8.19.tar.gz # cd…

    2015-03-03
  • 第一周作業

    1、描述計算機的組成及其功能。     運算器,控制器,存儲器,輸入設備,輸出設備     CPU:運算器+控制器     內存,硬盤:存儲器     輸入設備:鍵盤鼠標   &n…

    Linux干貨 2016-06-26
  • 第三次 練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 ~]# who | cut -d "" -f1 |uniq root     pts/0        2016-11-13 12:17 (172.16.220.14) 2、取出最后登錄到…

    Linux干貨 2016-11-16
  • MySQL應用管理

    這篇文章主要講述基本的SQL語句,以供新手參考使用,不過最好的辦法還是查閱官方文檔和help命令。 進入正題 什么是SQL?        SQL結構化查詢語言,是關系型數據庫查詢和管理語言,是一種數據庫查詢和程序設計語言,用于存取數據以及查詢,更新和管理關系型數據庫系統。 SQL的分類 &nbsp…

    Linux干貨 2015-09-23
欧美性久久久久