Linux三剑客之grep 与 egrep

grep:
Linux上文本处理三剑客
1 grep:文本过滤(模式:pattern)工具; *grep, egrep, fgrep2 sed:stream editor,文本编辑工具;
3 awk:Linux上的实现gawk,文本报告生成器;

grep: Global search REgular expression and Print out the line.

作用:
文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;
模式:由正则表达式字符及文本字符所编写的过滤条件;
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面意义,而表示控制或通配的功能;
分两类:
基本正则表达式:BRE
扩展正则表达式:ERE
grep -E, egrep
正则表达式引擎
 1 选项:
 2                             --color=auto: 对匹配到的文本着色显示;
 3                             -v: 显示不能够被pattern匹配到的行;
 4                             -i: 忽略字符大小写;
 5                             -o: 仅显示匹配到的字符串;
 6                             -q: 静默模式,不输出任何信息;
 7                             -A #:after, 后#行
 8                             -B #: before, 前#行
 9                             -C #:context, 前后各#行
10 
11                             -E:使用ERE;

基本正则表达式元字符:

字符匹配:

.:  匹配任意单个字符;
[]: 匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数;
*:匹配前面的字符任意次;
例如: grep "x*y" 
abxy
xay
xxxxxxy
贪婪模式
.*:任意长度的任意字符;
\?:匹配其前面的字符0或1次;即前面的可有可无;
\+:匹配其前面的字符至少1次;
\{m\}:匹配前面的字符m次;
\{m,n\}:匹配前面的字符至少m次,至多n次;
\{0,n\}:匹配前面的字符至多n次;
\{m,\}:匹配前面的字符至少m次;
位置锚定:
^:行首锚定;用于模式的最左侧;
$:行尾锚定;用于模式的最右侧;
^PATTERN$: 用于模式匹配整行;
^$: 空行;
^[[:space:]]*$
\< 或 \b:词首锚定;用于单词模式的左侧;
\> 或 \b:词尾锚定;用于单词模式的右侧;
\<PATTERN\>:匹配整个单词;
分组:
\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理;
\(xy\)*ab
Note: 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
\1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
\(ab\+\(xy\)*\):
\1: ab\+\(xy\)*
\2: xy
后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身)
练习实例
1、显示/proc/meminfo文件中以大小s开头的行;(要求:使用两种方式)
1 # grep '^{s|S}' /proc/meminfo
2 # grep -i '^s'  /proc/meminfo

2、显示/etc/passwd文件中不以/bin/bash结尾的行;

1 # grep -v '/bin/bash$'  /etc/passwd

3、显示/etc/passwd文件中ID号最大的用户的用户名;

1 # sort -t: -k3 -n /etc/passwd | tail -1 | cut -d: -f1

4、如果用户root存在,显示其默认的shell程序;

1 # id root &> /dev/null && grep "^root\>" /etc/passwd | cut -d: -f7

5、找出/etc/passwd中的两位或三位数;

1 # grep "\<[0-9]\{2,3\}\>" /etc/passwd

6、显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面存非空白字符的行;

1 # grep "^[[:space:]]\+[^[:space:]]" /etc/rc.d/rc.sysinit

7、找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行;

# netstat -tan | grep "LISTEN[[:space:]]*$"

8、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin);而后找出/etc/passwd文件中用户名同shell名的行;

1 # grep "^\([[:alnum:]]\+\>\).*\1$" /etc/passwd

egrep及扩展的正则表达式

egrep = grep -E

扩展正则表达式的元字符:
字符匹配:
.
[]
[^]
次数匹配:
*
?: 0或1次;
+:1次或多次;
{m}:匹配m次;
{m,n}:至少m,至多n次;
锚定:
^
$
\<, \b
\>, \b
分组:
()
后向引用:\1, \2, ...
或者:
a|b
C|cat: C或cat
练习实例
1、显示当前系统root、centos或user1用户的默认shell和UID;
1 # grep -E '^(root|centos|user1)\>' /etc/passwd | cut -d: -f1,3,7

2、找出/etc/rc.d/init.d/functions文件(centos6)中某单词后面跟一个小括号的行;

# grep -E -o "^[_[:alpha:]]+\(\)" /etc/rc.d/init.d/functions

3、使用echo输出一绝对路径,使用egrep取出其基名;

1 # echo "/mnt/sdc" | grep -E -o "[^/]+/?$" | cut -d"/" -f1

 

转载于:https://www.cnblogs.com/maxtgood/p/6155964.html

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

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

相关文章

WSGI直观形象的了解一下

1. 浏览器请求动态页面过程 2. WSGI 怎么在你刚建立的Web服务器上运行一个Django应用和Flask应用&#xff0c;如何不做任何改变而适应不同的web架构呢&#xff1f; 在以前&#xff0c;选择 Python web 架构会受制于可用的web服务器&#xff0c;反之亦然。如果架构和服务器可以…

安装Hbase(分布式)遇到一些问题及解决方法

问题一&#xff1a;安装完成后在Hbase shell 命令行执行list命令时&#xff0c;爆出如下错误&#xff1a; hbase(main):001:0> list TABLE …

安装MySql卡在Start Service的问题

我的情况&#xff1a;之前在windows下安装过5.6版本&#xff0c;卸载后&#xff0c;现在安装5.7版本&#xff0c;然后卡在Start Service这里&#xff0c;log日志没报任何错误&#xff0c;后来经过不断的尝试各种网上的办法终于把问题解决了。 问题的原因就是当初卸载5.6版本时…

学习进度条11

第十三周 日期 星期一 星期二 星期三 星期四 星期五 星期六 所花时间&#xff08;包括上课&#xff09; 19:10-22:20 (编程河北省科技信息通用调查系统) 8:00-10:00 (上课) 18:30-21:00 (Oracle实验) 14:00-16:30 (编程河北省科技信息通用调查系统) 18:20-22:30 (编…

Python面向切面编程是什么

简而言之就是装饰器 https://blog.csdn.net/qq_41856814/article/details/90146293

hibernate实现多变联合查询

Hibernate主要支持两种查询方式&#xff1a;HQL查询和Criteria查询。前者应用较为广发&#xff0c;后者也只是调用封装好的接口。 现在有一个问题&#xff0c;就是实现多表连接查询&#xff0c;且查询结果集不与任何一个实体类对应&#xff0c;怎么解决呢&#xff1f; 举个例子…

PyCharm光标变粗的解决办法

pycharm中光标变粗&#xff0c;如下&#xff1a; 此时变成了改写模式&#xff0c;只需要按下键盘的insert键即可 转载于:https://www.cnblogs.com/uglyliu/p/6159839.html

SparkRDD常用算子实践(附运行效果图)

目录1、简单算子说明2、复杂算子说明 目录 SparkRDD算子分为两类&#xff1a;Transformation与Action. Transformation&#xff1a;即延迟加载数据&#xff0c;Transformation会记录元数据信息&#xff0c;当计算任务触发Action时&#xff0c;才会真正开始计算。 Action&am…

six库是什么

Utilities for writing code that runs on Python 2 and 3”“” 它是一个专门用来兼容 Python 2 和 Python 3 的库。它解决了诸如 urllib 的部分方法不兼容&#xff0c; str 和 bytes 类型不兼容等“知名”问题。

Kali-linux使用Nessus

Nessus号称是世界上最流行的漏洞扫描程序&#xff0c;全世界有超过75000个组织在使用它。该工具提供完整的电脑漏洞扫描服务&#xff0c;并随时更新其漏洞数据库。Nessus不同于传统的漏洞扫描软件&#xff0c;Nessus可同时在本机或远端上遥控&#xff0c;进行系统的漏洞分析扫描…

HDFS读写数据的原理

目录1 概述2 HDFS写数据流程3 HDFS读数据流程 目录 最近由于要准备面试&#xff0c;就把之前学过的东西好好整理下&#xff0c;权当是复习。 下面说下HDFS读写数据的原理。 1 概述 HDFS集群分为两大角色&#xff1a;NameNode、DataNode NameNode负责管理整个文件系统的元数…

理解列存储索引

版权声明&#xff1a;原创作品&#xff0c;谢绝转载&#xff01;否则将追究法律责任。 优点和使用场景 SQL Server 内存中列存储索引通过使用基于列的数据存储和基于列的查询处理来存储和管理数据。 列存储索引适合于主要执行大容量加载和只读查询的数据仓库工作负荷…

Django项目部署到阿里云服务器上无法发送邮件STMP

部署好项目之后发送邮件无法发送&#xff0c;多方查阅之后&#xff0c;解决问题。 阿里云服务器禁用了25端口&#xff0c;导致无法发送邮件。 25端口申请开放的难度很大&#xff0c;直接放弃。 解决&#xff1a; 在 django项目的 settings.py文件中x修改port端口 。

美国诚实签经验——IMG全球医疗险,TODO

那么&#xff0c;诚实签最关键的4个要点 是什么呢&#xff1f; 第一&#xff0c;证明你有一定的经济实力。 可能需要房产、存款等证明&#xff0c;也需要银行信用卡或借记卡半年流水证明&#xff08;让人信服的每月进帐和消费能力&#xff09;。 这些是为了证明&#xff0c;你可…

大数据开发初学者学习路线

目录前言导读&#xff1a;第一章&#xff1a;初识Hadoop第二章&#xff1a;更高效的WordCount第三章&#xff1a;把别处的数据搞到Hadoop上第四章&#xff1a;把Hadoop上的数据搞到别处去第五章&#xff1a;快一点吧&#xff0c;我的SQL第六章&#xff1a;一夫多妻制第七章&…

Python的虚拟环境配置(pyenv+virtualenv)

一、为什么需要配置虚拟环境 Python 2和Python 3之间存在着较大的差异&#xff0c;并且&#xff0c;由于各种原因导致了Python 2和Python 3的长期共存。在实际工作过程中&#xff0c;我们可能会同时用到Python 2和Python 3&#xff0c;因此&#xff0c;也需要经常在Python 2和P…

安卓屏幕适配问题

屏幕适配是根据屏幕密度&#xff0c;dpi为单位的&#xff0c;而不是分辨率。 手机会根据不同手机的密度&#xff0c;自己去不同资源目录下去找对应的资源 比如:   每个图片目录下的图片资源都是一样的&#xff0c;只是大小不一样   比如drawable-sw800dp-mdpi目录&#xff…

MapReduce原理全剖析

MapReduce剖析图 如上图所示是MR的运行详细过程 首先mapTask读文件是通过InputFormat&#xff08;内部是调RecordReader()–&#xff1e;read()&#xff09;来一次读一行&#xff0c;返回K,V值。&#xff08;默认是TextInputFormat&#xff0c;还可以输入其他的类型如:音视频&…

利用selenium webdriver点击alert提示框

在进行元素定位时常常遇到这样的alert框&#xff1a; 那么该如何定位并点击确定或取消按钮呢&#xff1f;stackoverflow上找到了这个问题的答案。 OK&#xff0c; Show you the code&#xff1a; 1 driver.findElement(By.id("updateButton")).click(); 2 //pop up w…

Log 日志的使用与重要性

开发过程中出现bug是必不可免的&#xff0c;你会怎样debug&#xff1f;从第1行代码开始看么&#xff1f;还是有个文件里面记录着哪里错了更方便呢&#xff01;&#xff01;&#xff01;log日志 Python中有个logging模块可以完成相关信息的记录&#xff0c;在debug时用它往往事…