[笔记]linux grep之正则表达式

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: [笔记]linux grep之正则表达式

Linux grep

grep [options] regex [files]

其中options主要为下表:

选项  含义  功能描述
    -i  ignore case 忽略大小写
    -v  invert match    不匹配匹配的
    -l  file-with-match 输出匹配的文件名
    -L  file-without-match  输出不匹配的文件名
    -c  count   输出匹配的数目(行数)
    -n  number  输出匹配行的同时在前面加上文件名及在文件名中的行数
    -h  no-filename 抑制文件名的输出

特殊字符

符号  含义                  举例
  ^   开始标记                    "^abc"满足的例子abc、abcd
  ^   非(在[]内)         "[^abc]"满足的例子:ddd、mpd
  $   结束标记            ”abc$”满足的例子abc、mmabc
  .   任意字符            "a.c"满足的例子abc、fapcc
  \< 匹配单词开始           "\ <abc"满足的例子abc、abcd \="" style="box-sizing: border-box;">匹配单词结束           "abc\>"满足的例子abc、pmrabc
  |   或                   "AAA|BBB"满足的例子AAA、BBBpp</abc"满足的例子abc、abcd>

范围

符号  含义                                                           举例
  ?   匹配前一个字符0或1次                                        "abc?"满足的例子ab、mabcd
  *   匹配前一个字符≥0次                                         "abc*"满足的例子abbb、abcdk
  +   匹配前一个字符≥1次                                         "abc+"满足的例子abcd、abcccdd
  {}  {m}、{m,n}、{m,}、{,n}分别为匹配前一个字符m次、m到n次、≥m次、≤n次  "abc\{3,5\}"满足的例子abcccc、abcccccc
  []  []内如果不是范围,选其一;是范围的话,范围内选其一                 "m[abc]p"满足的例子acpd;m[1-9]p满足的例子m8pp
  ()  将候选的所有元素放在()内,用|隔开                                 "a(1|2|3)bc"满足的例子a1bc、mba3bcd

注意:{}在郑则表达式中需要转移,而{}()不需要。

在正则表达式中,我们通常用尖括号表示一个“词”,比如能够匹配“I love you.”,但不能匹配“My gloves are red.”。

[master@localhost Desktop]$ grep "\<master\>" /etc/passwd
master:x:1000:1000:master:/home/master:/bin/bash

上面的方法还是有些复杂了,grep 中还有一个更加简单的方法来实现对“词”的搜索:

[master@localhost Desktop]$ grep -w "master" /etc/passwd
master:x:1000:1000:master:/home/master:/bin/bash

Linux的grep命令使用or,and,not操作符

1.or操作

(1)使用 \|

[master@localhost Desktop]$ grep -w "master\|bin" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
master:x:1000:1000:master:/home/master:/bin/bash
mysql:x:988:1001::/home/mysql:/bin/false
test:x:1001:1002::/home/test:/bin/bash
ftpuser:x:1002:1003::/home/ftpuser:/bin/bash

(2)使用 -E (‘grep -E’ 命令等同于 egrep)

[master@localhost Desktop]$ grep -wE "master|bin" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
master:x:1000:1000:master:/home/master:/bin/bash
mysql:x:988:1001::/home/mysql:/bin/false
test:x:1001:1002::/home/test:/bin/bash
ftpuser:x:1002:1003::/home/ftpuser:/bin/bash
[master@localhost Desktop]$ egrep -w "master|bin" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
master:x:1000:1000:master:/home/master:/bin/bash
mysql:x:988:1001::/home/mysql:/bin/false
test:x:1001:1002::/home/test:/bin/bash
ftpuser:x:1002:1003::/home/ftpuser:/bin/bash

(3)使用选项 -e

使用grep -e 选项,只能传递一个参数。在单条命令中使用多个 -e 选项,得到多个pattern,以此实现OR操作。

[master@localhost Desktop]$ grep -we "master" -we "bin" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
master:x:1000:1000:master:/home/master:/bin/bash
mysql:x:988:1001::/home/mysql:/bin/false
test:x:1001:1002::/home/test:/bin/bash
ftpuser:x:1002:1003::/home/ftpuser:/bin/bash

2.and操作

(1).

a. grep -E ‘pattern1.*pattern2’ filename (顺序固定)
[master@localhost Desktop]$ grep -E 'master.*bin' /etc/passwd
master:x:1000:1000:master:/home/master:/bin/bash
b. grep -E ‘pattern1.*pattern2|pattern2.*pattern1’ filename (顺序不固定 )

text1.txt

100  Thomas  Manager    Sales       $5,000  
200  Jason   Developer  Technology  $5,500  
300  Raj     Sysadmin   Technology  $7,000  
400  Nisha   Manager    Marketing   $9,500  
500  Randy   Manager    Sales       $6,000
100  Thomas  Sales      Manager       $5,000 

test

[master@localhost Desktop]$ grep -E 'Manager.*Sales|Sales.*Manager' text1.txt 
100  Thomas  Manager    Sales       $5,000  
500  Randy   Manager    Sales       $6,000
100  Thomas  Sales      Manager       $5,000 

(2) 使用多个grep命令

可以使用多个 grep 命令 ,由管道符分割,以此来实现 AND 语义。

grep -E ‘pattern1’ filename | grep -E ‘pattern2’

[master@localhost Desktop]$ grep Manager text1.txt |grep Sales
100  Thomas  Manager    Sales       $5,000  
500  Randy   Manager    Sales       $6,000
100  Thomas  Sales      Manager       $5,000 

grep not 操作

使用选项 grep -v

使用 grep -v 可以实现 NOT 操作。 -v 选项用来实现反选匹配的( invert match)。如,可匹配得到除下指定pattern外的所有lines。

[master@localhost Desktop]$ grep -v 'Manager' text1.txt 
200  Jason   Developer  Technology  $5,500  
300  Raj     Sysadmin   Technology  $7,000  

Linux cut

cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file]

cut -d<TAB>

其中的“<TAB>”是由一个反斜杠\ 加上一个TAB按键组成的,在cmd下输入TAB的方法是先按ctrl+v,再按一个TAB键

Linux awk

自定义cmd分割

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
Linux
认识Linux指令之 “find grep” 命令
认识Linux指令之 “find grep” 命令
认识Linux指令之 “find grep” 命令
|
2月前
|
Linux
【linux】find、xargs、grep 联合查找文件内容
【linux】find、xargs、grep 联合查找文件内容
58 1
|
3月前
|
Linux 测试技术
软件测试/测试开发|一文详解Linux grep命令
软件测试/测试开发|一文详解Linux grep命令
37 1
|
3月前
|
Linux Shell 开发工具
Linux tail & cat & grep 命令详解
Linux tail & cat & grep 命令详解
147 0
|
3月前
|
SQL Linux 应用服务中间件
Linux - 管道(|)和grep 命令
Linux - 管道(|)和grep 命令
40 0
|
3月前
|
Linux Go 数据安全/隐私保护
linux常用命令手册 用户管理useradd 文件权限管理chmod 搜索管理find grep
linux常用命令手册 用户管理useradd 文件权限管理chmod 搜索管理find grep
35 2
|
25天前
|
Linux Shell
Linux下的Shell基础——正则表达式入门(四)
Linux下的Shell基础——正则表达式入门(四)
21 1
Linux下的Shell基础——正则表达式入门(四)
|
28天前
|
Ubuntu Linux Apache
Linux|Grep 命令的 12 个实用示例
Linux|Grep 命令的 12 个实用示例
46 3
|
2月前
|
机器学习/深度学习 Rust JavaScript
Rust 笔记:Rust 语言中应用正则表达式
Rust 笔记:Rust 语言中应用正则表达式
126 0
|
2月前
|
运维 网络协议 安全
Linux grep
Linux grep
29 1

相关产品

  • 云迁移中心