Linux / grep 中的正则表达式

零、前言

在 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!)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值