Linux正则表达式

简介:

什么是正则:一串有规律的字符串


grep:过滤指定关键词 格式:grep [-cinvABC] 'word' filename

-c 行数

-i  不区分大小写

-n  显示行号

-v  取反

-r   遍历所有子目录

-A  后面跟数字,过滤出符合要求的行以及下面n行

-B 后面跟数字,过滤符合要求的行以及上面的n行

-C 后面跟数字,同时过滤出符合要求的行以及上下各n行

实验


[root@localhost ~]# mkdir grep
[root@localhost ~]# cd grep/
[root@localhost grep]# cp /etc/passwd .
[root@localhost grep]# pwd
/root/grep
[root@localhost grep]# grep 'nologin' passwd #过滤nologin
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


[root@localhost grep]# grep -c 'nologin' passwd # 查看passwd 有多少行 -c
16



[root@localhost grep]# grep -n 'nologin' passwd #  查看nologin的行号 -n
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin


[root@localhost grep]# grep -i 'nologin' 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


[root@localhost grep]# grep -v 'nologin' passwd #取反,打印除了nologin以外的行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/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
[root@localhost grep]#

#grep -r 'root' /etc/   #过滤root有关的所有子目录 -r

# grep 'root' /etc/      #不加r 会提示这是一个目录


[root@localhost grep]# grep 'root' /etc/
grep: /etc/: 是一个目录


ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@localhost grep]# grep -nA2 'root' passwd #过滤root并打印下面两行  -A
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/NOLogin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
10:operator:x:11:0:operator:/root:/sbin/nologin
11-games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin


[root@localhost grep]# grep -nB2 'root' passwd #过滤root并打印上面两行    -B
1:root:x:0:0:root:/root:/bin/bash
--
8-halt:x:7:0:halt:/sbin:/sbin/halt
9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin



[root@localhost grep]# grep -nC2 'root' passwd #过滤root并打印上下两行  -C
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/NOLogin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
8-halt:x:7:0:halt:/sbin:/sbin/halt
9-mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11-games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

grep 正则表达式


[root@localhost grep]# grep '[0-9]' 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
adm:x:3:4:adm:/var/adm:/sbin/nologin


[root@localhost grep]# grep -nv '[0-9]' /etc/inittab  #过滤出所有不包含数字的行
1:# inittab is no longer used when using systemd.
2:#
3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
4:#


[root@localhost grep]# grep -n '^#' /etc/inittab    #过滤出所有带#号的行
1:# inittab is no longer used when using systemd.
2:#
3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
4:#


[root@localhost grep]# grep '[^0-9]' inittab   #过滤出所有非数字的行 只要行中有字母都符合
# inittab is no longer used when using systemd.
hdihsifwiehieiwhiwiihi
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.


[root@localhost grep]# grep '^[^0-9]' inittab  #过滤出所有非数字开头的行
# inittab is no longer used when using systemd.
hdihsifwiehieiwhiwiihi
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3



[root@localhost grep]# grep -vn '^[^0-9]' inittab   #过滤相反的行
3:
12:

[root@localhost grep]# grep 'r.o' passwd  #  .  点表示任意的一个字符
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin


[root@localhost grep]# grep 'ro*o' passwd  #* 表示重复*前面的字符0次或是n次
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[root@localhost grep]# grep '.*' passwd   # .* 表示匹配任意一个字符
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLoginooo
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/vaoooo/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


[root@localhost grep]# grep 'sshd.*nologin' passwd  # 用.*匹配一行
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin


[root@localhost grep]# grep 'o\{2\}' passwd  #{2} 表示出现2次0 但是要脱义\
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLoginooo
lp:x:4:7:lp:/vaoooo/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin


[root@localhost grep]# grep '0\{1,3\}' passwd  # 表示一个范围 一个0 2个o  或是3个o
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin


[root@localhost grep]# egrep -E '0{2}' passwd #表示出现2个o的情况  egrep是grep的扩展
games:x:12:100:games:/usr/games:/sbin/nologin
[root@localhost grep]# grep -E '0{2}' passwd #表示出现2个o的情况
games:x:12:100:games:/usr/games:/sbin/nologin


[root@localhost grep]# grep -E '(oo){2}' passwd #表示出现2次o的情况
lp:x:4:7:lp:/vaoooo/spool/lpd:/sbin/nologin


[root@localhost grep]# egrep 'o+o' passwd   #+表示+号前面的字符的1次或是多次
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/NOLoginooo
lp:x:4:7:lp:/vaoooo/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin


[root@localhost grep]# egrep 'o?l' passwd   #表示?前面的字符重复次数为0或1次
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/vaoooo/spool/lpd:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

[root@localhost grep]# grep -E 'root|nologin' passwd   #|表示或者,这里匹配root 或者nologin
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@localhost grep]# egrep  'root|nologin' passwd   #|表示或者,这里匹配root  者nologin
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/vaoooo/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

[root@localhost ~]# grep -r --include="*.php" 'eval' /data/   #把一个目录下,过 滤所有*.php文档中含有eval的行




本文转自 yzllinux 51CTO博客,原文链接:http://blog.51cto.com/12947851/2061332,如需转载请自行联系原作者

相关文章
|
8月前
|
Linux Shell Perl
第十一章、【Linux】正则表达式与文件格式化处理
第十一章、【Linux】正则表达式与文件格式化处理
52 0
|
6月前
|
Linux Perl
[笔记]linux grep之正则表达式
[笔记]linux grep之正则表达式
|
7月前
|
Unix Linux
如何在 Linux 中使用 Grep 和正则表达式进行文本搜索?
如何在 Linux 中使用 Grep 和正则表达式进行文本搜索?
191 5
|
10月前
|
机器学习/深度学习 NoSQL Linux
Linux行处理工具: grep 正则表达式
Linux行处理工具: grep 正则表达式
82 0
|
11月前
|
Linux Windows
【Linux命令篇】正则表达式浅析
转义字符是将普通字符转化为特殊字符的一种方式。 在正则表达式中,一些字符被定义为特殊字符(也称为元字符),它们具有特殊的含义。这些特殊字符包括:
124 0
|
Linux
Linux 命令合集 文本处理和正则表达式相关命令之一
Linux 命令合集 文本处理和正则表达式相关命令之一
114 1
Linux 命令合集 文本处理和正则表达式相关命令之一
|
Linux
Linux 命令合集 文本处理和正则表达式相关命令之三
Linux 命令合集 文本处理和正则表达式相关命令之三
95 0
Linux 命令合集 文本处理和正则表达式相关命令之三
|
Linux
Linux 命令合集 文本处理和正则表达式相关命令之四
Linux 命令合集 文本处理和正则表达式相关命令之四
92 0
Linux 命令合集 文本处理和正则表达式相关命令之四
|
Linux
Linux 命令合集 文本处理和正则表达式相关命令之五
Linux 命令合集 文本处理和正则表达式相关命令之五
78 0
Linux 命令合集 文本处理和正则表达式相关命令之五
|
Linux
Linux 命令合集 文本处理和正则表达式相关命令之六
Linux 命令合集 文本处理和正则表达式相关命令之六
80 0
Linux 命令合集 文本处理和正则表达式相关命令之六