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文件里边:

bash 复制代码
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

bash 复制代码
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 讲》

相关推荐
秋名山小桃子6 分钟前
Kunlun 2280服务器(ARM)Raid卡磁盘盘符漂移问题解决
运维·服务器
与君共勉121386 分钟前
Nginx 负载均衡的实现
运维·服务器·nginx·负载均衡
岑梓铭13 分钟前
(CentOs系统虚拟机)Standalone模式下安装部署“基于Python编写”的Spark框架
linux·python·spark·centos
努力学习的小廉13 分钟前
深入了解Linux —— make和makefile自动化构建工具
linux·服务器·自动化
MZWeiei17 分钟前
Zookeeper基本命令解析
大数据·linux·运维·服务器·zookeeper
7yewh32 分钟前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux
Arenaschi36 分钟前
在Tomcat中部署应用时,如何通过域名访问而不加端口号
运维·服务器
小张认为的测试36 分钟前
Linux性能监控命令_nmon 安装与使用以及生成分析Excel图表
linux·服务器·测试工具·自动化·php·excel·压力测试
waicsdn_haha44 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
打鱼又晒网44 分钟前
linux网络套接字 | 深度解析守护进程 | 实现tcp服务守护进程化
linux·网络协议·计算机网络·tcp