邢台如何做企业网站,设计免费,优秀企业网站模板,动态手机网站前言#xff1a;
相信提高文本检索工具#xff0c;大家脑海里肯定有很多工具会自动跳出来#xff0c;比如#xff0c;grep#xff0c;egrep#xff0c;sed#xff0c;cat#xff0c;more#xff0c;less#xff0c;cut#xff0c;awk#xff0c;vim#xff0c;vi…前言
相信提高文本检索工具大家脑海里肯定有很多工具会自动跳出来比如grepegrepsedcatmorelesscutawkvimvinanostrings等等工具vimnano 这样的文本编辑工具也是兼具文本检索功能的嘛要是不能检索就没有存在的必要了~~~~~
那么这些文本信息检索工具里如果按照使用频率来说第一个毫无疑问是文本编辑工具vim了其次就是文本检索工具cat和grep了在次就是sed和awk这样的流检索工具了而egrep可能使用频率上就比较低了但其实有些工具就和人的性格一样低调不代表能力不行相反egrep的强大应该是和vim一样毋庸置疑的啊
其实呢grep和grep这两个命令是比较有意思的也就是非常的有用的在Linux这里grep和egrep这两个命令是必要要熟练掌握和运用的
那么本文将就grep和egrep命令在做一个详细的介绍
一、
grep和egrep的相似处和不同处 egrep执行效果与grep-E相似使用的语法及参数可参照grep指令与grep的不同点在于解读字符串的方法。egrep是用extended regular expression语法来解读的而grep则用basic regular expression 语法解读extended regular expression比basic regular expression的表达更规范且egep支持更多的元字符即egrep使用的是拓展的正则表达式grep和egrep这两个命令的帮助基本是一致的so学会了一个命令另一个命令就也学会了
那么也就是可以简单的认为grep和egrep基本是一个命令只是egrep使用的时候更为简练搜索的时候正则规则egrep比grep更多它们之间的关系可以认为是vim和vi vim比vi多了语法搜索高亮等等附加功能但主要的功能---文本编辑并没有任何区别的关系这里我可以保证这么理解绝对绝对的没有问题~~~~
那么其实grep这个命令并没有使用的太多必要如果只是简单的文本搜索过滤的话好吧grep还是可以勉强一用的
二、
grep和egrep的基本无脑用法
示例文件我这里选择使用本地yum仓库的xml配置文件选择此文件的原因是数字和字母都有比较像配置文件其实也确实是一个配置文件
可以看到该文件的文本特征是数字和字母混杂在一起了有纯字母行但没有纯数字行
[rootcentos7 repodata]# cat repomd.xml
?xml version1.0 encodingUTF-8?
repomd xmlnshttp://linux.duke.edu/metadata/repo xmlns:rpmhttp://linux.duke.edu/metadata/rpmrevision1709240060/revision
data typefilelistschecksum typesha256406fe311374b513103fc6968c07da6f9a99b561c90871608cfd89cad119a1126/checksumopen-checksum typesha256ba1d9203986defbf63d9361351ed24d33aabad40a014061e669f6fa62dccd868/open-checksumlocation hrefrepodata/406fe311374b513103fc6968c07da6f9a99b561c90871608cfd89cad119a1126-filelists.xml.gz/timestamp1709240061/timestampsize87505/sizeopen-size935761/open-size
/data
data typeprimarychecksum typesha2568595bbc4226db56075dfaf6317e5effd7f92f18d5a6d7526e77c6f6552cebf94/checksumopen-checksum typesha256ffc6df89c274e8925cc631ead5f6cfe9435a193c22d5b22a9c99b400a51d881a/open-checksumlocation hrefrepodata/8595bbc4226db56075dfaf6317e5effd7f92f18d5a6d7526e77c6f6552cebf94-primary.xml.gz/timestamp1709240061/timestampsize49182/sizeopen-size444084/open-size
/data
data typeprimary_dbchecksum typesha256e65d3a6cf36df5021676d932b2a2d0b0c03e4271655c045c07e94222a5290b18/checksumopen-checksum typesha256c24e01dc5b3388cba3b876c64ddf9406cffb175ee3b2a7fd7e4b11a43c62a84a/open-checksumlocation hrefrepodata/e65d3a6cf36df5021676d932b2a2d0b0c03e4271655c045c07e94222a5290b18-primary.sqlite.bz2/timestamp1709240061/timestampdatabase_version10/database_versionsize115549/sizeopen-size524288/open-size
/data
data typeother_dbchecksum typesha256fb5a57bd9729ce92ea197c79fb637d77f6c2abf1bedd8e6fe8407f6582b118d3/checksumopen-checksum typesha256a2fb0f11d2991d2756117198c24cc5e92ddcefa763a6708b4a3f6a55c55e41ce/open-checksumlocation hrefrepodata/fb5a57bd9729ce92ea197c79fb637d77f6c2abf1bedd8e6fe8407f6582b118d3-other.sqlite.bz2/timestamp1709240061/timestampdatabase_version10/database_versionsize60744/sizeopen-size296960/open-size
/data
data typeotherchecksum typesha256f31c3eb35c261d4437cfa9dc1fef589cd0142ce2575cedc6ccca0e9c355c48f8/checksumopen-checksum typesha2562708ba2eac9dff6e1118067b0b1bc42f138ccf58335c92214dcae503813e3112/open-checksumlocation hrefrepodata/f31c3eb35c261d4437cfa9dc1fef589cd0142ce2575cedc6ccca0e9c355c48f8-other.xml.gz/timestamp1709240061/timestampsize43373/sizeopen-size319989/open-size
/data
data typefilelists_dbchecksum typesha256258ab32bd065ef14ed56b34a06798c95ee2de2652b83dce93a3cd8d62928d3c3/checksumopen-checksum typesha25625a2e76fe87f7fed34ace38b0daae9de3b9b8f4aca259441d226f6633db3ab10/open-checksumlocation hrefrepodata/258ab32bd065ef14ed56b34a06798c95ee2de2652b83dce93a3cd8d62928d3c3-filelists.sqlite.bz2/timestamp1709240061/timestampdatabase_version10/database_versionsize106570/sizeopen-size476160/open-size
/data
/repomd什么叫无脑呢这里自然说的是不需要绞尽脑汁想正则表达式也就是跟cat命令一样仅仅查看文本文档的内容
说明空单引号表示没有字符串过滤自然就是取的所有文本内容了通过管道符结合tail -n 10 回显了该文件的最后10行其实这个命令等同于cat repomd.xml|tail -n 10
[rootcentos7 repodata]# grep repomd.xml |tail -n 10
data typefilelists_dbchecksum typesha256258ab32bd065ef14ed56b34a06798c95ee2de2652b83dce93a3cd8d62928d3c3/checksumopen-checksum typesha25625a2e76fe87f7fed34ace38b0daae9de3b9b8f4aca259441d226f6633db3ab10/open-checksumlocation hrefrepodata/258ab32bd065ef14ed56b34a06798c95ee2de2652b83dce93a3cd8d62928d3c3-filelists.sqlite.bz2/timestamp1709240061/timestampdatabase_version10/database_versionsize106570/sizeopen-size476160/open-size
/data
/repomd自然的egrep的效果和grep是一模一样的无需废话多言
[rootcentos7 repodata]# egrep repomd.xml |tail -n 10
data typefilelists_dbchecksum typesha256258ab32bd065ef14ed56b34a06798c95ee2de2652b83dce93a3cd8d62928d3c3/checksumopen-checksum typesha25625a2e76fe87f7fed34ace38b0daae9de3b9b8f4aca259441d226f6633db3ab10/open-checksumlocation hrefrepodata/258ab32bd065ef14ed56b34a06798c95ee2de2652b83dce93a3cd8d62928d3c3-filelists.sqlite.bz2/timestamp1709240061/timestampdatabase_version10/database_versionsize106570/sizeopen-size476160/open-size
/data
/repomd三、
反向过滤 -v 逻辑符 not
egrep 过滤去除所有带数字的行只保留纯字母行
[rootcentos7 repodata]# egrep -v [0-9] repomd.xml
repomd xmlnshttp://linux.duke.edu/metadata/repo xmlns:rpmhttp://linux.duke.edu/metadata/rpm
data typefilelists
/data
data typeprimary
/data
data typeprimary_db
/data
data typeother_db
/data
data typeother
/data
data typefilelists_db
/data
/repomd同样的过滤去除所有带字母的行只保留纯数字行没有纯数字行因此没有输出
[rootcentos7 repodata]# egrep -v [a-z] repomd.xml
[rootcentos7 repodata]# 四、
过滤单词 完全精确匹配 -w
###说明sed命令精确匹配要写很多比较麻烦
[rootcentos7 repodata]# egrep -w size repomd.xml size87505/sizeopen-size935761/open-sizesize49182/sizeopen-size444084/open-sizesize115549/sizeopen-size524288/open-sizesize60744/sizeopen-size296960/open-sizesize43373/sizeopen-size319989/open-sizesize106570/sizeopen-size476160/open-size[rootcentos7 repodata]# egrep -w siz repomd.xml ###这个无输出回显
五、
匹配行显示行号
过滤的同时显示行号 -n 显示行号
[rootcentos7 repodata]# egrep -n -v [0-9] repomd.xml
2:repomd xmlnshttp://linux.duke.edu/metadata/repo xmlns:rpmhttp://linux.duke.edu/metadata/rpm
4:data typefilelists
11:/data
12:data typeprimary
19:/data
20:data typeprimary_db
28:/data
29:data typeother_db
37:/data
38:data typeother
45:/data
46:data typefilelists_db
54:/data
55:/repomd
[rootcentos7 repodata]# cat repomd.xml |egrep -n -v [0-9]
2:repomd xmlnshttp://linux.duke.edu/metadata/repo xmlns:rpmhttp://linux.duke.edu/metadata/rpm
4:data typefilelists
11:/data
12:data typeprimary
19:/data
20:data typeprimary_db
28:/data
29:data typeother_db
37:/data
38:data typeother
45:/data
46:data typefilelists_db
54:/data
55:/repomd这里就有意思了egrep可以回显上下文
行号上下文回显 -C 1 显示匹配行的上下文各一行 数字按需指定
[rootcentos7 repodata]# egrep -C 1 -n -w other repomd.xml
31- open-checksum typesha256a2fb0f11d2991d2756117198c24cc5e92ddcefa763a6708b4a3f6a55c55e41ce/open-checksum
32: location hrefrepodata/fb5a57bd9729ce92ea197c79fb637d77f6c2abf1bedd8e6fe8407f6582b118d3-other.sqlite.bz2/
33- timestamp1709240061/timestamp
--
37-/data
38:data typeother
39- checksum typesha256f31c3eb35c261d4437cfa9dc1fef589cd0142ce2575cedc6ccca0e9c355c48f8/checksum
40- open-checksum typesha2562708ba2eac9dff6e1118067b0b1bc42f138ccf58335c92214dcae503813e3112/open-checksum
41: location hrefrepodata/f31c3eb35c261d4437cfa9dc1fef589cd0142ce2575cedc6ccca0e9c355c48f8-other.xml.gz/
42- timestamp1709240061/timestamp行号上下文回显 -A 1 显示匹配行的下文一行 数字按需指定
[rootcentos7 repodata]# egrep -A 1 -n -w other repomd.xml
32: location hrefrepodata/fb5a57bd9729ce92ea197c79fb637d77f6c2abf1bedd8e6fe8407f6582b118d3-other.sqlite.bz2/
33- timestamp1709240061/timestamp
--
38:data typeother
39- checksum typesha256f31c3eb35c261d4437cfa9dc1fef589cd0142ce2575cedc6ccca0e9c355c48f8/checksum
--
41: location hrefrepodata/f31c3eb35c261d4437cfa9dc1fef589cd0142ce2575cedc6ccca0e9c355c48f8-other.xml.gz/
42- timestamp1709240061/timestamp行号上下文回显 -B 1 显示匹配行的上文一行 数字按需指定
[rootcentos7 repodata]# egrep -B 1 -n -w other repomd.xml
31- open-checksum typesha256a2fb0f11d2991d2756117198c24cc5e92ddcefa763a6708b4a3f6a55c55e41ce/open-checksum
32: location hrefrepodata/fb5a57bd9729ce92ea197c79fb637d77f6c2abf1bedd8e6fe8407f6582b118d3-other.sqlite.bz2/
--
37-/data
38:data typeother
--
40- open-checksum typesha2562708ba2eac9dff6e1118067b0b1bc42f138ccf58335c92214dcae503813e3112/open-checksum
41: location hrefrepodata/f31c3eb35c261d4437cfa9dc1fef589cd0142ce2575cedc6ccca0e9c355c48f8-other.xml.gz/六、
特征匹配
正则表达式 以结束的行
[rootcentos7 repodata]# egrep -n .*$ repomd.xml
2:repomd xmlnshttp://linux.duke.edu/metadata/repo xmlns:rpmhttp://linux.duke.edu/metadata/rpm
4:data typefilelists
12:data typeprimary
20:data typeprimary_db
29:data typeother_db
38:data typeother
46:data typefilelists_db以/ 开始的行
[rootcentos7 repodata]# egrep -n ^/ repomd.xml
11:/data
19:/data
28:/data
37:/data
45:/data
54:/data
55:/repomd很多时候查看配置文件的时候不想看那些以#开始的注释文件那么egrep将会非常简单
下面一个是不过滤#开始的行一个是过滤掉#开始的行
[rootcentos7 ~]# egrep ^# /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
# SELINUXTYPE can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
[rootcentos7 ~]# egrep -v ^# /etc/selinux/config SELINUXdisabled
SELINUXTYPEtargeted 七、
递归目录匹配并忽略大小写
egrep -r 递归扫描 -i 忽略大小写 搜索/etc/目录下所有包含root这个单词的文件
Binary file /etc/aliases.db matches
[rootcentos7 repodata]# egrep -r -i root /etc/ |more
/etc/fstab:/dev/mapper/centos-root / xfs defaults 0 0
/etc/pki/ca-trust/ca-legacy.conf:# The upstream Mozilla.org project tests all changes to the root CA
/etc/pki/ca-trust/ca-legacy.conf:# to temporarily keep certain (legacy) root CA certificates trusted,
/etc/pki/ca-trust/ca-legacy.conf:# It may keep root CA certificate as trusted, which the upstream
/etc/pki/ca-trust/extracted/README:root CA certificates.
/etc/pki/ca-trust/extracted/java/README:root CA certificates.
Binary file /etc/pki/ca-trust/extracted/java/cacerts matches
/etc/pki/ca-trust/extracted/openssl/README:root CA certificates.
/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt:# Actalis Authentication Root CA
/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt:# AddTrust External Root
/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt:# AddTrust Low-Value Services Root
/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt:# Amazon Root CA 1
/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt:# Amazon Root CA 2
/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt:# Amazon Root CA 3八、
搜索包含有5个连续数字的行5个数字后接的是 可以看到有10位数字被匹配到了并不是十分准确
[rootcentos7 repodata]# egrep [.*[:digit:]]{5} repomd.xml revision1709240060/revisiontimestamp1709240061/timestampsize87505/sizeopen-size935761/open-sizetimestamp1709240061/timestampsize49182/sizeopen-size444084/open-sizetimestamp1709240061/timestampsize115549/sizeopen-size524288/open-sizetimestamp1709240061/timestampsize60744/sizeopen-size296960/open-sizetimestamp1709240061/timestampsize43373/sizeopen-size319989/open-sizetimestamp1709240061/timestampsize106570/sizeopen-size476160/open-size[:alnum:] 匹配字母和数字.等同于A-Za-z0-9. [:alpha:] 匹配字母. 等同于A-Za-z. [:blank:] 匹配一个空格或是一个制表符(tab). [:cntrl:] 匹配控制字符. [:digit:] 匹配(十进制)数字. 等同于0-9. [:graph:] (可打印的图形字符). 匹配 ASCII 码值的33 - 126之间的字符. 这和下面提到的 [:print:]一样,但是不包括空格字符. [:lower:] 匹配小写字母. 等同于a-z. [:print:] (可打印字符). 匹配 ASCII码值 32 - 126之间的字符. 这和上面提到的一样 [:graph:],但是增多一个空格字符. [:space:] 匹配空白字符 (空格符和水平制表符). [:upper:] 匹配大写字母. 等同于A-Z. [:xdigit:] 匹配十六进制数字. 等同于0-9A-Fa-f.