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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: [笔记]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分割

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
110 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
28天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
77 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
2月前
|
机器学习/深度学习 缓存 JavaScript
简单粗暴的正则表达式笔记
简单粗暴的正则表达式笔记
43 5
|
2月前
|
监控 Linux
linux之grep详解
linux之grep详解
|
2月前
|
存储 Linux Shell
linux查找技巧: find grep xargs
linux查找技巧: find grep xargs
36 13
|
2月前
|
机器学习/深度学习 存储 Linux
linux中强大且常用命令:find、xargs、grep
linux中强大且常用命令:find、xargs、grep
99 9
|
2月前
|
SQL 移动开发 Linux
linux下find、grep命令详解
linux下find、grep命令详解
168 8
|
3月前
|
Unix Linux 开发工具
linux笔记 diff及patch的制作与使用
这篇文章是关于Linux系统中使用`diff`命令生成补丁文件以及使用`patch`命令应用这些补丁的详细教程和实战案例。
85 2
linux笔记 diff及patch的制作与使用
|
3月前
|
Unix Linux C语言
在Linux中,grep和egrep命令的区别?
在Linux中,grep和egrep命令的区别?
|
3月前
|
Linux
Linux源码阅读笔记13-进程通信组件中
Linux源码阅读笔记13-进程通信组件中