加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

grep及正则表达式

发布时间:2020-12-13 22:06:12 所属栏目:百科 来源:网络整理
导读:grep及正则表达式 grep: Linux上文本处理三剑客 grep:文本过滤(模式:pattern)工具; grep,egrep,fgrep sed:stream editor,文本编辑工具; awk:Linux上的实现gawk,文本报告生成器; grep: Global search REgular expression and Print out the line. 作

grep及正则表达式

grep:
Linux上文本处理三剑客
grep:文本过滤(模式:pattern)工具;
grep,egrep,fgrep
sed:stream editor,文本编辑工具;
awk:Linux上的实现gawk,文本报告生成器;

grep: Global search REgular expression and Print out the line.
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;
模式:由正则表达式字符及文本字符所编写的过滤条件;
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面意义,而表示控制或通配的功能;
分两类:
基本正则表达式:BRE
扩展正则表达式:ERE
grep -E,egrep

正则表达式引擎

grep [OPTIONS] PATTERN [FILE...]

选项:
--color=auto: 对匹配到的文本着色显示;
-v: 显示不能够被pattern匹配到的行;
-i: 忽略字符大小写;
-o: 仅显示匹配到的字符串;
-q: 静默模式,不输出任何信息;
-A #:after,后#行
-B #: before,前#行
-C #:context,前后各#行

-E:使用ERE;

[root@MyServer~]#greproot/etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@MyServer~]#grep--color=autoroot/etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@MyServer~]#grep-vroot/etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/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
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtualconsolememoryowner:/dev:/sbin/nologin
saslauth:x:499:499:"Saslauthduser":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nologin

-i忽略大小写

-o只显示本身

[root@MyServer~]#grep-oroot/etc/passwd
root
root
root
root
[root@MyServer~]#grep-qroot/etc/passwd
[root@MyServer~]#echo$?
0
[root@MyServer~]#grep-qxxxxxxxxxx/etc/passwd
[root@MyServer~]#echo$?
1

一个匹配到,一个没有匹配到

-A 2 表示匹配到的行及其后2行都显示

[root@MyServer~]#grep-A2root/etc/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
--
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

-B 2表示匹配的行及前2行

[root@MyServer~]#grep-B2root/etc/passwd
root:x:0:0:root:/root:/bin/bash
--
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

-C 2表示匹配的行及其的前和后的各2行

[root@MyServer~]#grep-C2root/etc/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
--
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin



基本正则表达式元字符:
字符匹配:
. : 匹配任意单个字符;
[] : 匹配指定范围内的任意单个字符
[^] :匹配指定范围外的任意单个字符
[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]

表示查找s开头、n结尾,中间有2个单字符的项

[root@MyServer~]#grep's..n'/etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/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
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsa:x:69:69:virtualconsolememoryowner:/dev:/sbin/nologin
saslauth:x:499:499:"Saslauthduser":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nologin


匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数;
*:匹配前面的字符任意次;可以为0,1,2,3....任意
例如: grep "x*y"
abxy
xay
xxxxxxy

[root@MyServer~]#cataa.txt
abxy
xay
xxxy
xxaay
aaaa
[root@MyServer~]#grepx*yaa.txt
abxy
xay
xxxy
xxaay

贪婪模式
.*:任意长度的任意字符;

[root@MyServer~]#cataa.txt
abxy
xay
xxxy
xxaay
aaaa


[root@MyServer~]#grepx.*yaa.txt
abxy
xay
xxxy
xxaay

?:匹配其前面的字符0或1次;即前面的可有可无;
+:匹配其前面的字符至少1次;
{m}:匹配前面的字符m次;
{m,n}:匹配前面的字符至少m次,至多n次;
{0,n}:匹配前面的字符至多n次;
{m,}:匹配前面的字符至少m次;

[root@MyServer~]#grep--color=autox*yaa.txt
abxy
xay
xxxy
xxaay

位置锚定: ^:行首锚定;用于模式的最左侧; $:行尾锚定;用于模式的最右侧; ^PATTERN$: 用于模式匹配整行; ^$: 空行; ^[[:space:]]*$ &; 或 b:词首锚定;用于单词模式的左侧; &; 或 b:词尾锚定;用于单词模式的右侧; &;PATTERN&;:匹配整个单词; 分组: ():将一个或多个字符捆绑在一起,当作一个整体进行处理; (xy)*ab Note: 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: 1,2,3,... 1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符; (ab+(xy)*): 1: ab+(xy)* 2: xy 后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身) 练习: 1、显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式) grep -i '^s' /proc/meminfo 2、显示/etc/passwd文件中不以/bin/bash结尾的行; grep '/bin/bash$' /etc/passwd grep -v '/bin/bash$' /etc/passwd 3、显示/etc/passwd文件中ID号最大的用户的用户名; sort -t: -k3 -n /etc/passwd | tail -l | cut -d: -f1 4、如果用户root存在,显示其默认的shell程序; # id root &> /dev/null && grep "^root&;" /etc/passwd | cut -d: -f7 5、找出/etc/passwd中的两位或三位数; # grep "&;[0-9]{2,3}&;" /etc/passwd 6、显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存非空白字符的行; # grep "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg 7、找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行; # netstat -tan | grep "LISTEN[[:space:]]*$" 8、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行; useradd -s /sbin/nologin nologin # grep "^([[:alnum:]]+&;).*1$" /etc/passwd 练习: 1、写一个脚本,实现如下功能 如果user1用户存在,就显示其存在,否则添加之; 显示添加的用户的id号等信息; #!/bin/bash id user1 &> /dev/null && echo "user1 exists." || useradd user1 id user1 2、写一个脚本,完成如下功能 如果root用户登录了当前系统,就显示root用户在线;否则说明其未登录; w | grep "^root&;" &> /dev/null && echo "root logged" || echo "no loggin"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读