扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
以下内容首发自公众号“小汪Waud”。
目前创新互联公司已为上千的企业提供了网站建设、域名、雅安服务器托管、网站改版维护、企业网站设计、涧西网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
本期介绍在Linux环境下的正则表达式及grep命令。
正则表达式(Regular Expression)是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些字符的特定组合,组成一个“规则字符串”,这个字符串用来表达对字符串的一种过滤逻辑。
正则表达式基本上是一种表示法,只要程序支持这种表示法,该程序就可以用来作为正则表达式的字符串处理之用。如vi、grep、awk、sed等程序支持正则表达式,所以可以使用正则表达式的特殊字符来进行字符串的处理。但例如cp、ls等命令并不支持正则表达式,所以只能用自己的通配符。
正则表达式依照 不同的严谨度 分为:基础正则表达式和扩展正则表达式。
注意!
grep是一种强大的文本搜索工具,可以使用 正则表达式匹配模式 查找文件里符合条件的字符串,并打印出来。
有点类似于WORD里的查找功能。
grep支持三种正则表达式语法:Basic、Extended和perl兼容。 如果没有提供正则表达式类型,grep将搜索模式解释为基本的正则表达式。要将模式解释为扩展正则表达式,请使用-E。
查看grep的帮助文档,如下
基本用法
grep [OPTION]... PATTERN [FILE]...
高级用法
grep [-A] [-B] [--color=auto] "查找字符" [模式] [文件]
常用参数
首先通过cat命令查看samples.txt的内容,如下图
如果想检索以K为行首的行,通过以下命令即可得到
如果想检索以Z为行尾的行,通过以下命令即可得到
如果想检索三个字符其中前面为K,后面为D中间字符,为任意字符,通过以下命令即可得到
参考资料
正则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索或替换那些符合某个模式的文本内容。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。
只有掌握了正则表达式,才能全面地掌握 Linux 下的常用文本工具(例如:grep、egrep、GUN sed、 Awk 等) 的用法
grep、sed、awk天然支持正则
grep -v代表反选,反向选择匹配到的内容
grep -E代表使用扩展正则
grep -P代表使用Perl正则
sed -r 代表使用扩展正则
正则表达式分为三类(man grep可以看到,分别是basic RegExs,extended RegExs,perl RegExs)
1、基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称 BREs)
2、扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs)
3、Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称 PREs)
b. 处理过程:查找文本文件中是否包含要查找的 “关键字”(关键字可以是正则表达式) ,默认返回匹配的该行的内容
c. grep|egrep处理文件时,按行处理 |
| sed | sed | sed -r | - | a. 处理对象:文本文件
b.处理操作:对文本文件的内容进行 查找、替换、删除、增加等操作
c. sed 在处理文本文件的时候,按行处理 |
| awk | - | awk | - | a. awk 处理的对象:文本文件
b. awk 处理操作:主要是对列进行操作 |
注意:egrep 或 sed -r 默认使用扩展正则表达式(EREs),一般特殊字符({})可以不转义
grep -E 以及egrep(Extend Regular Expression)
Linux通配符和三剑客的正则表达式是不一样的,因此,代表的意义也有较大的区别 。
通配符一般用户命令行bash环境,而linux正则表达式用于grep, sed, awk场景。
通配符说明
示例:* 的使用:代表任意0-N个字符,代表所有字符
Linux对文本操作命令及正则表达式:
cat
cat 是 concatenate 的缩写,所以它的作用其实是连接文件。但默认情况下它会将连接文件的结果送到标准输出。所以我们常用来显示文件内容。类似于 dos 中的 type。
more
当一个文件的内容超过一屏后,我们可以用 more 这个指令来逐屏 察看 文件内容。
less
less 在 more 的基础上,更可以逐行 察看 ,前后翻页。
head
head 显示文件开头部分内容,默认显示前十行参数 --lines 或者 –n 指明显示行数基本格式:
tail
tail 显示文件结尾部分内容,命令用法同 head,参数 -f 显示文件的纪实更新,用于监视日志文件
tail 默认显示文件列表中每个文件的后 10 行,如果没有文件名或文件名为“-”则其从标准输入中读取文件,如果有多个文件则其会在文件前面加上“==文件名==”以便区别。
# tail /etc/mail/sendmail.mc 默认查看文件的后 10 行内容
# tail –n 20 /etc/passwd 查看文件后 20 行内容
注意: # tail –f /var/log/message 实时监控日志文件更新信息,非常重要
diff
diff 用于比较两个文件之间的区别,并送到标准输出。输出时先报告两个文件的哪一行不同。基本格式:
参数:
uniq 用于去除文本中相邻的重复行。
-u 参数可以只显示那些没有被重复过的行。 -d 显示有被重复过的行。
cut
cut 可以根据一个指定的标记(默认是 tab)来为文本划分列,然后将此列显示。使用权限:所有使用者
基本格式: cut -cnum1 -num2 filename
说明:显示每行从开头算起 num1 到 num2 的文字。
[root@uplooking root] $ cut –f1 –d: /etc/shadow 表示以 : 为分隔符,显示 /etc/shadow 的第一列 sort
sort 用来按各种需要重新排列文本,一般运用在一个管道之后。例如:
默认情况下 sort 按照字母顺序排列文本。
wc
wc 用来统计一个文件的行数、词数、字数并送到标准输出。也可以用-l(行数)、-w(词数)、-c(字数)来指定输出内容。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流