shell程式設計(四)| grep正規表示式
grep
一,grep概述
Global search regular expression and print out the line全面搜尋研究正規表示式並顯示出來
grep 命令是一種強大的文字搜尋工具 , 根據使用者指定的“模式”對目標文字進行匹配檢查 , 列印匹配到的行由正規表示式或者字元及基本文字字元所編寫的過濾條件確定
二,grep的基本用法和格式
grep root passwd 顯示包含root的行
grep ^root passwd 顯示以root開頭的行
grep root$ passwd 顯示以root結尾的行
grep -i root passwd 忽略大小寫
grep -v root passwd 顯示不包含匹配文字的所有行
grep -E "^root|ROOT$" passwd -E表示擴充套件的正規表示式,以root開頭或者以ROOT結尾的行
注意:正規的 grep 不支援擴充套件的正規表示式子 , 豎線是用於表示”或”的擴充套件正規表示式元字元 , 正規的 grep 無法識別,egrep 命令等同於‘grep -E
####像這樣帶|的就是明顯的擴充套件的正規表示式,如果不加-E就沒有輸出
練習
找出root在位於中間的行
- [root@100 mnt]# cat passwd
- root:x:0:0:root:/root:/bin/bash
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- sync:x:5:0:sync:/sbin:/bin/sync
- shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
- halt:x:7:0:halt:/sbin:/sbin/halt
- mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
- root:haha:root
- root:test:haha
- haha:root:test
- haha:test:ROOT:test
- [root@100 mnt]# grep -i root passwd | grep -v -i ^root | grep -v -i root$ >>>>>>兩次反向過濾
- haha:root:test
- haha:test:ROOT:test
- [root@100 mnt]# grep -i root passwd | grep -v -i -E "^root|root$" >>>>>>這一條是把上面命令做了合併
- haha:root:test
- haha:test:ROOT:test
- [root@100 mnt]# grep -v -i -E "^root|root$" passwd | grep -i root
- haha:root:test
- haha:test:ROOT:test
三,grep中的正規表示式
grep 'r..t' test 表示匹配r開頭,t結尾的,中間含有兩個任意字元的行,有幾個.就匹配多少個
grep -E 'r*t' test 表示顯示以r開始,t結尾,中間含有0到任意個r的行
grep -E 'ro*t' test 表示顯示以ro開始,t結尾,中間含有0到任意個o的行,這裡*表示匹配0到任意多個*前面的字元
######注意:一定要加-E否則結果不對
grep -E 'ro?t' test 表示顯示以ro開頭,t結尾的,中間含有0或者1個字元的行
grep -E 'ro{1,}t' test 表示顯示以ro開頭, t結尾,中間含有1到多個任意字元的行
grep -E 'ro{1,3}t' test 表示顯示以ro開頭,t結尾,中間含有1到3個任意字元的行
grep -E 'ro{,3}' test 表示顯示以ro開頭,t結尾,中間含有0到3個任意字元的行
grep -E 'ro{3,}t' test 表示顯示以ro開頭,t結尾的,中間含有3到無窮任意字元的行
grep -E 'ro+t' test 表示顯示以ro開頭,t結尾的,中間含有1到無窮多個任意字元的行
這與grep -E 'ro{1,}t' test 的效果一樣
grep -E '(root){1,}' test 表示匹配以root開頭的,含有1到無窮多個root的行
########這裡root被括起來,表示一個整體!!!
grep -E 'r.*t' test 表示以r開始t結尾中間含有0到任意個任意字元的行
#####r.*t匹配的是. r*t匹配的是r
grep -E "r..\>" test 表示顯示含有r(不一定是r開頭),後面只匹配兩個任意字元的行,\>表示防止向後擴充套件,有幾個..就匹配幾個任意字元
grep -E "\<..t" test 表示顯示前面兩個是任意字元,後面以t結尾的行,\<表示防止向前擴張,有幾個.前面就匹配幾個任意字元
練習
1,顯示ip地址
- [root@100 mnt]# ifconfig eth0 | grep -E "inet\>" | cut -d " " -f 10 >>>>> \>是直接顯示inet,不擴充套件
- 172.25.254.100
- [root@100 mnt]# ifconfig eth0 | grep -E "inet " | cut -d " " -f 10 >>>>> 這裡在inet後面新增了空格,相當於直接搜尋inet空格 ,也可以時先精確查詢
- 172.25.254.100
2,顯示可以登陸系統的使用者
- [root@100 mnt]# cat /etc/shells >>>>>>檢視系統使用者可以使用的shell
- /bin/sh
- /bin/bash
- /sbin/nologin
- /usr/bin/sh
- /usr/bin/bash
- /usr/sbin/nologin
- /bin/tcsh
- /bin/csh
- [root@100 mnt]# grep -v nologin /etc/shells >>>>>顯示使用者可以登陸系統的shell
- /bin/sh
- /bin/bash
- /usr/bin/sh
- /usr/bin/bash
- /bin/tcsh
- /bin/csh
- [root@100 mnt]# echo `grep -v nologin /etc/shells` >>>>>echo可以把多行顯示為一行,這裡顯示為一行的目的是為了後面替換為|進行grep的與操作
- /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash /bin/tcsh /bin/csh
- [root@100 mnt]# echo `grep -v nologin /etc/shells` | sed 's/ /|/g' >>>>全域性替換 把空格換為| 方便grep的與操作
- /bin/sh|/bin/bash|/usr/bin/sh|/usr/bin/bash|/bin/tcsh|/bin/csh
- [root@100 mnt]# vim user_check.sh
- [root@100 mnt]# cat user_check.sh
- #################################
- # Author: Minz #
- # Version: #
- # Mail: zmxxx@163.com #
- # Date: 2018-06-17 #
- # Description #
- # #
- #################################
- #!/bin/bash
- SHELL=$(echo `grep -v nologin /etc/shells` | sed 's/ /|/g')
- grep -E "$SHELL" /etc/passwd | cut -d : -f 1 管道符前面找出可以登陸使用者的行,後面擷取使用者列
- 測試
- [root@100 mnt]# sh user_check.sh
- root
- student
- hh
- hehe
- nihao
- [root@100 mnt]# useradd -s /bin/tcsh user1 tcsh也可以登陸shell
- [root@100 mnt]# sh user_check.sh
- root
- student
- hh
- hehe
- nihao
- user1
- [root@100 mnt]# useradd -s /bin/nologin user2
- [root@100 mnt]# sh user_check.sh
- root
- student
- hh
- hehe
- nihao
- user1
相關文章
- shell程式設計(四)| sed 正規表示式程式設計
- 05 shell程式設計之正規表示式程式設計
- linux grep 正規表示式Linux
- grep正規表示式詳解
- grep 命令系列:grep 中的正規表示式
- Shell程式設計基礎學習之一:正規表示式程式設計
- 快速掌握grep命令及正規表示式
- Linux grep命令和正規表示式Linux
- shell指令碼正規表示式指令碼
- Qt Creator程式設計之正規表示式QT程式設計
- Linux之grep中的正規表示式Linux
- shell指令碼(14)-正規表示式指令碼
- shell基礎 — 基本正規表示式
- 正規表示式筆記(四)筆記
- Linux grep 命令中的正規表示式詳解Linux
- 理解正規表示式(程式設計師第3期文章)程式設計師
- 【Perl程式設計-6】正規表示式--替換+轉化程式設計
- QTP的描述性程式設計與正規表示式QT程式設計
- [.net 物件導向程式設計進階] (4) 正規表示式 (三) 表示式助手物件程式設計
- Python正規表示式初識(四)Python
- 學習C#高階程式設計之正規表示式C#程式設計
- Linux系統程式設計(16)——正規表示式入門Linux程式設計
- Linux系統程式設計(17)——正規表示式進階Linux程式設計
- [Shell] awk學習(3)-regular expression 正規表示式Express
- 正規表示式
- 『忘了再學』Shell基礎 — 24、Shell正規表示式的使用
- .NET下正規表示式應用四例
- 正規表示式(程式碼java版)Java
- 匹配空行正規表示式程式碼
- 【正規表示式】常用的正規表示式(數字,漢字,字串,金額等的正規表示式)字串
- 正規表示式子表示式程式碼例項
- 【JavaScript】正規表示式JavaScript
- php –正規表示式PHP
- 正規表示式 教程
- 正規表示式 split()
- java正規表示式Java
- PHP正規表示式PHP
- javascript正規表示式JavaScript