博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【2018.04.25学习笔记】【linux基础知识9.1-9.3】
阅读量:6822 次
发布时间:2019-06-26

本文共 10791 字,大约阅读时间需要 35 分钟。

hot3.png

9.1 正则介绍_grep(上)

正则:是指有规律的字符串,学习正则表达式,就是学习这些规律以字符串的形式表述,对以后的编写shell脚本有很大的帮助。

正则表达式有三个实用的工具,号称正则三剑客:grep/egrep、sed、awk,在shell脚本编程中非常重要。

grep:一种文本搜索工具,使用特定的匹配模式搜索过滤指定的关键词,并默认输出匹配含有关键词的行。

grep -[选项] '模式(关键词)' 文件名

-c选项:匹配包含的行数 grep -c 'root' passwd

[root@lgs-01 grep]# grep 'root' passwdtest root:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin[root@lgs-01 grep]# grep -c 'root' passwdtest 2

-n选项:输出匹配行,并显示其在文件内的行号 grep -n 'root' passwd

[root@lgs-01 grep]# grep -n 'root' passwdtest 1:root:x:0:0:root:/root:/bin/bash10:operator:x:11:0:operator:/root:/sbin/nologin

-i选项:不区分大小写匹配 grep -i 'nologin' passwd

[root@lgs-01 grep]# grep 'user' passwdtest [root@lgs-01 grep]# grep -i 'user' passwdtest ftp:x:14:50:FTP User:/var/ftp:/sbin/nologinpolkitd:x:999:997:User for polkitd:/:/sbin/nologin

-v选项:取反匹配输出 grep -r 'nologin' passwd

[root@lgs-01 grep]# grep -v 'nologin' passwdtest root:x:0:0:root:/root:/bin/bashsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltlgs:x:1008:1000::/home/lgs:/bin/bashabc:x:1001:1000::/home/abc:/bin/bash

-r选项:遍历所有子目录匹配,针对目录 grep -r 'root' /etc/

-A选项:后面跟数字如-A2,匹配改行及其下面的两行也输出 grep -A2 'root' passwd

[root@lgs-01 grep]# grep -nA2 'root' passwdtest1:root:x:0:0:root:/root:/bin/bash2-bin:x:1:1:bin:/bin:/sbin/nologin3-daemon:x:2:2:daemon:/sbin:/sbin/nologin--10:operator:x:11:0:operator:/root:/sbin/nologin11-games:x:12:100:games:/usr/games:/sbin/nologin12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

-B选项:后面跟数字如-B2,匹配改行及其上面的两行也输出 grep -B2 'root' passwd

[root@lgs-01 grep]# grep -nB2 'root' passwdtest1:root:x:0:0:root:/root:/bin/bash--8-halt:x:7:0:halt:/sbin:/sbin/halt9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin10:operator:x:11:0:operator:/root:/sbin/nologin

-C选项:后面跟数字如-C2,匹配改行及其上面的两行也输出 grep -C2 'root' passwd

[root@lgs-01 grep]# grep -nC2 'root' passwdtest 1:root:x:0:0:root:/root:/bin/bash2-bin:x:1:1:bin:/bin:/sbin/nologin3-daemon:x:2:2:daemon:/sbin:/sbin/nologin--8-halt:x:7:0:halt:/sbin:/sbin/halt9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin10:operator:x:11:0:operator:/root:/sbin/nologin11-games:x:12:100:games:/usr/games:/sbin/nologin12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

9.2 grep(中)

grep 范例:

grep '[0-9]' passwd :匹配带数字的行

[root@lgs-01 grep]# grep '[0-9]' passwdtest root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologinsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologindbus:x:81:81:System message bus:/:/sbin/nologinpolkitd:x:999:997:User for polkitd:/:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologinchrony:x:998:996::/var/lib/chrony:/sbin/nologinlgs:x:1008:1000::/home/lgs:/bin/bashabc:x:1001:1000::/home/abc:/bin/bash

grep -v '[0-9]' passwd :匹配不含数字的行

[root@lgs-01 grep]# grep -v '[0-9]' passwdtest abc:y

grep '^abc' passwd :匹配以abc号开头的行

[root@lgs-01 grep]# grep '^abc' passwdtest abc:x:1001:1000::/home/abc:/bin/bashabc:0abc:y

grep -v '^abc' passwd :匹配不以abc号开头的行

[root@lgs-01 grep]# grep -v '^abc' passwdtest root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologinsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologindbus:x:81:81:System message bus:/:/sbin/nologinpolkitd:x:999:997:User for polkitd:/:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologinchrony:x:998:996::/var/lib/chrony:/sbin/nologinlgs:x:1008:1000::/home/lgs:/bin/bash

grep -v '^abc' passwd |grep -v '^[a-zA-Z]' :匹配不以abc开头,又不以字母开头的行

[root@lgs-01 grep]# grep -v '^abc' passwdtest |grep -v '^[a-zA-Z]'12:22:55587:112:2112:200195159

grep '[^0-9]' passwd :匹配含有非数字的行

[root@lgs-01 grep]# grep '[^0-9]' passwdtest root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologinsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologindbus:x:81:81:System message bus:/:/sbin/nologinpolkitd:x:999:997:User for polkitd:/:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologinchrony:x:998:996::/var/lib/chrony:/sbin/nologinlgs:x:1008:1000::/home/lgs:/bin/bashabc:x:1001:1000::/home/abc:/bin/bash

grep '^[^0-9]' passwd :匹配以非数字开头的行

[root@lgs-01 grep]# grep '^[0-9]' passwdtest 12:22:55587:112:2112:200195159

^跟在字符后面,代表以该字符开头;如果在[ ]中括号内,代表取反的意思。

^abc:表示以abc字符串开头。 ^[abc]:表示以a开头或者以b开头或者以c开头。[ ]号里表示里面某单一个字符。

[root@lgs-01 grep]# grep '^abc' passwdtest abc:x:1001:1000::/home/abc:/bin/bashabc:0abc:y[root@lgs-01 grep]# grep '^[abc]' passwdtest bin:x:1:1:bin:/bin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinchrony:x:998:996::/var/lib/chrony:/sbin/nologinabc:x:1001:1000::/home/abc:/bin/bashabc:0abc:y

9.3 grep(下)

grep里的通配符号:

*号 代表前面的单个字符有0个或者多个

.号 代表 匹配任意单个字符

grep 'r.o' passwd :匹配含 r.o (.号代表任意单个字符) 三个字符的行

[root@lgs-01 grep]# grep 'r.o' passwdtest root:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin[root@lgs-01 grep]# grep 'r..o' passwdtest operator:x:11:0:operator:/root:/sbin/nologinpolkitd:x:999:997:User for polkitd:/:/sbin/nologin

grep 'r*o' passwd :匹配含 o 或者 nr (n代表任意多个) o 的行

[root@lgs-01 grep]# grep -n 'r*o' passwdtest 1:root:x:0:0:root:/root:/bin/bash2:bin:x:1:1:bin:/bin:/sbin/nologin3:daemon:x:2:2:daemon:/sbin:/sbin/nologin4:adm:x:3:4:adm:/var/adm:/sbin/nologin5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin10:operator:x:11:0:operator:/root:/sbin/nologin11:games:x:12:100:games:/usr/games:/sbin/nologin12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin13:nobody:x:99:99:Nobody:/:/sbin/nologin14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin15:dbus:x:81:81:System message bus:/:/sbin/nologin16:polkitd:x:999:997:User for polkitd:/:/sbin/nologin17:postfix:x:89:89::/var/spool/postfix:/sbin/nologin18:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin19:chrony:x:998:996::/var/lib/chrony:/sbin/nologin20:lgs:x:1008:1000::/home/lgs:/bin/bash21:abc:x:1001:1000::/home/abc:/bin/bash

grep '.*' passwd :匹配任意行、包括空行 (贪婪匹配)

[root@lgs-01 grep]# grep '.*' passwdtest root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologinsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologindbus:x:81:81:System message bus:/:/sbin/nologinpolkitd:x:999:997:User for polkitd:/:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologinchrony:x:998:996::/var/lib/chrony:/sbin/nologinlgs:x:1008:1000::/home/lgs:/bin/bashabc:x:1001:1000::/home/abc:/bin/bash12:22:55587:112:2112:200195159abc:0abc:y

{ }花括号代表前面的字符连着出现的次数

grep 'o{2}' passwd :匹配 o 必须连着出现2次的行 。{ }要用转义字符才生效。

[root@lgs-01 grep]# grep 'o\{2\}' passwdtest root:x:0:0:root:/root:/bin/bashlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologin

egrep 'o{2}' passwd :用egrep不用转义字符 \ 让{ }生效

[root@lgs-01 grep]# egrep 'o{2}' passwdtest root:x:0:0:root:/root:/bin/bashlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologin

grep 'o+d' passwd :匹配o出现1次或者多次的行。+号 代表其前面的单字符出现1次或者多次

[root@lgs-01 grep]# grep 'o\+d' passwdtest nobody:x:99:99:Nobody:/:/sbin/nologin

grep 'o?t' passwd : 匹配 t 或者 ot 的行。?号代表其前面的单字符出现0次或者1次

[root@lgs-01 grep]# grep 'o\?t' passwdtest root:x:0:0:root:/root:/bin/bashshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltoperator:x:11:0:operator:/root:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologindbus:x:81:81:System message bus:/:/sbin/nologinpolkitd:x:999:997:User for polkitd:/:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

egrep 代表 grep -E

egrep 'root|nologin' passwd :匹配含root或者nologin的行。| 代表或者的意思

[root@lgs-01 grep]# grep -E 'root|nologin' passwdtest root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologinsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologindbus:x:81:81:System message bus:/:/sbin/nologinpolkitd:x:999:997:User for polkitd:/:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologinchrony:x:998:996::/var/lib/chrony:/sbin/nologin

egrep '(99:){2}' passwd :匹配 99:字符串出现2次的行 。( )中括号代表字符串组合

[root@lgs-01 grep]# egrep '(99:){2}' passwdtest nobody:x:99:99:Nobody:/:/sbin/nologin

+号 { }号 ?号 &号 |号 等特使符号,在grep中需要 加 \ 号转义才能使用,不转义表示特殊符号本身的字符输出

而在egrep中就不用转义。

 

转载于:https://my.oschina.net/u/3804114/blog/1801194

你可能感兴趣的文章
解决PotPalyer不能拖放播放
查看>>
Linux安装mysql5.7
查看>>
HIVE常用操作以及函数
查看>>
【优达学城测评】SQL 支持许的数据类型(3)
查看>>
PHP CURL CURLOPT参数说明(curl_setopt)
查看>>
Learning NodeJs(1)
查看>>
怎么解决mysql远程连接报10038的错误
查看>>
js 父窗口可以找到子窗口的元素
查看>>
从FB10.3升级到11.0后几个问题的解决
查看>>
Linux下使用pure-ftpd建立匿名ftp访问
查看>>
PhalApi:[1.11] 快速入门: 接口开发示例 源码 图文
查看>>
分享插件
查看>>
HTML 页面中Buton 按钮提交,一个很坑的问题
查看>>
kitchen测试salt-formulas
查看>>
拿Nginx 部署你的静态网页
查看>>
23种设计模式
查看>>
openstack命令整理
查看>>
使用xtrabackup备份mysql8.0.16
查看>>
安装apache遇到的几个错误及解决办法 [error] Apache2.2: Service is already installed.
查看>>
Spring Security源码分析一:Spring Security认证过程
查看>>