Linux学习之正则表达式元字符和grep命令

cat /etc/redhat-release看到操作系统的版本是CentOS Linux release 7.6.1810 (Core)uname -r可以看到内核版本是3.10.0-957.21.3.el7.x86_64
在这里插入图片描述

正则表达式是一种搜索字符串的模式,通俗点理解,也就是普通字符和元字符共同组成的字符集合匹配模式。正则表达式的主要作用是文本搜索和字符串处理。
正则表达式有两种:基本正则表达式;扩展正则表达式。
元字符就是一些具有特殊含义的字符,用于表示某种特定的字符类型或者行为,它的含义就不是显示在计算机上的含义了。基本正则表达式具有如下的元字符:

元字符名称作用举例
..匹配除换行符之外的任意一个字符,只能匹配一个字符234.6,就可以23416234262343623446234562346623476234a6234b6等,这里有点多,不一一列举了
*星号匹配*前一个字符或者一个正则表达式0至若干次234*,就可匹配23+零个4或者多个4,比如232342344234444234444...,而f[ae]*ll会匹配fallfellfaallfaa...llfae...llfeallfea...llfeellfee...ll
^脱字符,插入符号,折字符1.匹配一行的开始 2.否定正则表达式中一个字符串的意思1.^123会匹配每行以123开头的字符串,2.[^a]会匹配没有a的字符串
$美元符号匹配行尾456$会匹配以456结尾的字符串
[]方框号匹配方括号内指定的字符集中的一个字符[an]会匹配an[b-d]会匹配bcd三个字符
\反斜线转义一个特殊的字符,使这个字符得到字面意义的解释\^就表示字符串^,不再表示匹配一行开始的意义,而\.就是表示字面含义的.,不再能够匹配任意字符
\<\>转义尖括号标记单词边界尖括号必须是转义的,否则它们只有字符的字面含义。\<you\>就只能匹配you,不能匹配your

grep

grep命令在 Linux 中用于在文件中搜索特定的文本模式。
接下来使用grep来验证上边元字符的使用实例:
先使用下边的命令把一下字符串写到当前greptest.txt文件里边:

echo "god is good" >> greptest.txt
echo "good" >> greptest.txt
echo "good learning" >> greptest.txt
echo "a good learner" >> greptest.txt
echo "gold" >> greptest.txt
echo "1. gold jewelry" >> greptest.txt
echo "2. gold coins" >> greptest.txt
echo "3. gold medal" >> greptest.txt
echo "4. gold standard" >> greptest.txt
echo "5. gold mine" >> greptest.txt
echo "6. gold rush" >> greptest.txt
echo "7. goldsmith" >> greptest.txt
echo "8. gold bar" >> greptest.txt
echo "9. gold leaf" >> greptest.txt
echo "10. gold price" >> greptest.txt
echo "11. gold reserves" >> greptest.txt
echo "12. gold market" >> greptest.txt
echo "13. gold investment" >> greptest.txt
echo "14. gold necklace" >> greptest.txt
echo "15. gold watch" >> greptest.txt
echo "1 gold jewelry" >> greptest.txt
echo "2 gold coins" >> greptest.txt
echo "3 gold medal" >> greptest.txt
echo "4 gold standard" >> greptest.txt
echo "5 gold mine" >> greptest.txt
echo "6 gold rush" >> greptest.txt
echo "7 goldsmith" >> greptest.txt
echo "8 gold bar" >> greptest.txt
echo "9 gold leaf" >> greptest.txt
echo "10 gold price" >> greptest.txt
echo "11 gold reserves" >> greptest.txt
echo "12 gold market" >> greptest.txt
echo "13 gold investment" >> greptest.txt
echo "14 gold necklace" >> greptest.txt
echo "15 gold watch" >> greptest.txt

在这里插入图片描述
cat -n greptest.txt可以把行号在前,内容在后显示出来。
在这里插入图片描述

grep "." greptest.txt发现全部匹配了,可以看到所有的字符都显示红色了,需要注意的是grep会整行显示,就是说一行中只有有匹配的字符串,那么文件中这一行字符串都会显示,但是匹配的字符串会以红色显示。
在这里插入图片描述

grep -n "g.d" greptest.txt可以看到匹配greptest.txt里边的godgrep "g..d" greptest.txt匹配的是goodgold,注意冒号之前的绿色数字是文件内容里边对应的行号。
在这里插入图片描述

grep -n "go*d" greptest.txt可能匹配到godgood,使用cat -n greptest.txt | grep "go*d"也可以匹配到godgood,并且把内容中的行号也显示出来。这种显示格式有些不一样。
在这里插入图片描述

grep -n "^12" greptest.txt可以把以12开头的字符串匹配上,同样的,cat greptest.txt | grep "^12",也可以转换格式输出,但是可以实现相同的匹配功能,cat -n greptest.txt | grep "^12"就无法进行匹配了,因为cat -n在使用时会先输出多个空格然后在输出内容行号,之后再输出文件里边的内容。
在这里插入图片描述

grep "e$" greptest.txt可以匹配以e结尾的字符串,grep "good$" greptest.txt可以匹配以good结尾的字符串。
在这里插入图片描述

grep -n go[ol]d greptest.txt能够匹配goodgoldgrep -n "1[234]" greptest.txt能够匹配121314
在这里插入图片描述

echo "$ ." >> greptest.txt
echo "*" >> greptest.txt

greptest.txt里边写入$ .*
在这里插入图片描述

cat -n greptest.txt看一下内容。
在这里插入图片描述

grep "\$ \." greptest.txt能够匹配到$ .grep -n "\*" greptest.txt能够匹配到*
在这里插入图片描述

grep -n "goo" greptest.txt是匹配含有goo的字符串,而grep -n "\<goo\>" greptest.txt是完全匹配goo的字符串。
在这里插入图片描述

此文章为8月Day 4学习笔记,内容来源于极客时间《Linux 实战技能 100 讲》。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/55759.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样将项目jar包放到服务器上

目录 1、在配置文件中配置账号密码 2.在父级的pom里面&#xff0c;加上这个标签 3. deploy部署 4. 注&#xff1a;这两个id得匹配上&#xff08;原因&#xff1a;有的人会只有上传到测试包的权限&#xff0c;id对应&#xff0c;拥有账号密码的才能有权限&#xff09; 5.子项…

Visual Studio Code 常见的配置、常用好用插件以及【vsCode 开发相应项目推荐安装的插件】

一、VsCode 常见的配置 1、取消更新 把插件的更新也一起取消了 2、设置编码为utf-8&#xff1a;默认就是了&#xff0c;不用设置了 3、设置常用的开发字体&#xff1a;Consolas, 默认就是了&#xff0c;不用设置了 字体对开发也很重要&#xff0c;不同字体&#xff0c;字母形…

Day12-1-Webpack前端工程化开发

Webpack前端工程化 1 案例-webpack打包js文件 1 在index.html中编写代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><me…

学生管理系统(升级版)

import java.util.ArrayList; import java.util.Random; import java.util.Scanner;public class Demo_学生管理系统 {public static void main(String[] args) {ArrayList<User> list new ArrayList<>();Scanner sc new Scanner(System.in);while (true) {Syste…

基于ARM+FPGA (STM32+ Cyclone 4)的滚动轴承状态监测系统

状态监测系统能够在故障早期及时发现机械设备的异常状态&#xff0c;避免故障的 进一步恶化造成不必要的损失&#xff0c;滚动轴承是机械设备的易损部件&#xff0c;本文对以滚动 轴承为研究对象的状态监测系统展开研究。现有的监测技术多采用定时上传监 测数据&#xff0c;…

chaitin-Nginx+Docker

Nginx实战 任务一 1、源码包安装NGINX A&#xff0c;搭建Web Server&#xff0c;任意HTML页面&#xff0c;其8080端口提供Web访问服务&#xff0c;截图成功访问http(s)&#x1f615;/[Server1]:8080并且回显Web页面 官网地址&#xff1a;http://nginx.org/en/download.html 步骤…

【开源项目--稻草】Day03

【开源项目--稻草】Day03 1. 续Spring-Security1.1 自定义登录界面 2. 用户注册2.1 将注册页面显示2.2 编写控制器进行测试2.3 编写注册业务逻辑2.4 注册功能的收尾 3. VUE3.1 VUE的基本使用3.1.1 什么是VUE 3.2 使用VUEAjax完善稻草问答的注册功能 1. 续Spring-Security 1.1 …

springboot+vue超市进销存管理系统_91crh

表名&#xff1a;zengsongxinxi 功能&#xff1a;赠送信息 字段名称 类型 长度 字段说明 主键 默认值 id bigint 主键 主键 addtime timestamp 创建时间 CURRENT_TIMESTAMP shangpinmingcheng varchar 200 商品名称…

如何在IDEA中启动多个SpringBoot服务实例

文章目录 一、前言&#xff1a;二、IDEA版本&#xff1a;三、Allow parallel run 模式&#xff1a;四、解决方案&#xff1a; 一、前言&#xff1a; 在IDEA中&#xff0c;"Allow parallel run"是一个配置选项&#xff0c;用于指定是否允许并行运行多个相同的启动配置…

uniapp使用阿里图标

效果图&#xff1a; 前言 随着uniApp的深入人心&#xff0c;我司也陆续做了几个使用uniapp做的移动端跨平台软件&#xff0c;在学习使用的过程中深切的感受到了其功能强大和便捷&#xff0c;今日就如何在uniapp项目中使用阿里字体图标的问题为大家献上我的一点心得&#xff0…

triangles parallel lines

三角形与平行线 如何把现实问题或者抽象问题图形化呢。 梯形面积&#xff1a;四边形面积是如何从三角形面积转换而来的呢&#xff0c;数学里面作图其实蛮重要的&#xff0c;作图的好坏关系到是否能够更加直观明了展现关系&#xff0c;例如为什么有时候三角形&#xff0c;梯形要…

LNMP及论坛搭建(第一个访问,单节点)

LNMP&#xff1a;目前成熟的一个企业网站的应用模式之一&#xff0c;指的是一套协同工作的系统和相关软件 能够提供静态页面服务&#xff0c;也可以提供动态web服务&#xff0c;LNMP是缩写 L&#xff1a;指的是Linux操作系统。 N&#xff1a;指的是nginx&#xff0c;nginx提…