零、前言
在 Linux 、类 Unix 系统中我该如何使用 Grep 命令的正则表达式呢?
Linux 附带有 GNU grep 命令工具,它支持扩展正则表达式 extended regular expressions,而且 GNU grep 在所有的 Linux 系统中都是默认有的。Grep 命令被用于搜索定位存储在您服务器或工作站上的任何信息。
一、正则表达式
^w1
w1|w2
[^ ]
二、grep 正则表达式示例
1、在 /etc/passswd 目录中搜索 'vivek'(默认区分大小写)
grep vivek /etc/passwd
输出结果:
vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
gitevivek:x:1002:1002::/home/gitevivek:/bin/sh
2、搜索大小写任意的 vivek(即不区分大小写的搜索)
-i 忽略大小写
-w 全字符匹配
grep -i -w vivek /etc/passwd
3、搜索大小写任意的 vivek 或 raj
-E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
grep -E -i -w "uucp|tss" /etc/passwd
输入结果:
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
tss:x:108:112:TPM2 software stack,,,:/var/lib/tpm:/bin/false
三、锚点
你可以分别使用 ^ 和 $ 符号来正则匹配输入行的开始或结尾。
1、下面的例子搜索显示仅仅以 tss 开始的输入行:
grep ^tss /etc/passwd
输出栗子:
tss:x:108:112:TPM2 software stack,,,:/var/lib/tpm:/bin/false
再来一个栗子:
grep ^ss /etc/passwd
输出结果:
sstpc:x:104:110:Secure Socket Tunneling Protocol (SSTP) Client,,,:/var/run/sstpc/:/bin/false
sshd:x:110:65534::/run/sshd:/usr/sbin/nologin
2、你可以仅仅只搜索出以单词 sys 开始的行,即不显示 systemd 等。
grep -w ^sys /etc/passwd
数据结果:
sys:x:3:3:sys:/dev:/usr/sbin/nologin
不加 -w 的结果:
sys:x:3:3:sys:/dev:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
systemd-coredump:x:998:998:systemd Core Dumper:/:/usr/sbin/nologin
3、找出以单词 word 结尾的行:
grep "bash$" /etc/passwd
输出结果:
root:x:0:0:root:/root:/bin/bash
xcl:x:1000:1000::/home/xcl:/bin/bash
4、匹配仅仅只包含 foo 的行
grep '^foo$' 文件名
5、如下所示的例子可以搜索空行
grep '^$' 文件名
四、字符类
匹配 Vivek 或 vivek:
grep '[vV]ivek' 文件名
或者
grep '[vV][iI][Vv][Ee][kK]' 文件名
也可以匹配数字 (即匹配 vivek1 或 Vivek2 等等):
grep -w '[vV]ivek[0-9]' 文件名
可以匹配两个数字字符(即 foo11、foo12 等):
grep 'foo[0-9][0-9]' 文件名
不仅仅局限于数字,也能匹配至少一个字母的:
grep '[A-Za-z]' 文件名
显示含有 "w" 或 "n" 字符的所有行:
grep [wn] 文件名
放在括号内的表达式,即包在 "[:" 和 ":]" 之间的字符类的名字,它表示的是属于此类的所有字符列表。标准的字符类名称如下:
[:alnum:]
- 字母数字字符[:alpha:]
- 字母字符[:blank:]
- 空字符: 空格键符 和 制表符[:digit:]
- 数字: '0 1 2 3 4 5 6 7 8 9'[:lower:]
- 小写字母: 'a b c d e f g h i j k l m n o p q r s t u v w x y z'[:space:]
- 空格字符: 制表符、换行符、垂直制表符、换页符、回车符和空格键符[:upper:]
- 大写字母: 'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'
在这个例子所示的是匹配所有大写字母:
grep '[:upper:]' 文件名
转载(更全):技术|grep 命令系列:grep 中的正则表达式
(SAW:Game Over!)