grep:文本搜素工具,根据用户指定的文本模式对目标文件进行逐行搜索,显示能被模式所匹配到的行

包含三个命令:grep、egrep(相当于grep -E 扩展的正则表达式)和fgrep(相当于grep -F 只能字符串匹配)

格式:

  grep [options] PATTEN filename

options

grep -v (--invert-match):反向匹配,显示不能被表达式匹配的行

grep -o (--only-matching):仅显示被模式匹配到的字串,而非整行,将匹配到的字符串一行一个显示

grep -n :打印行号

grep -q:静默模式,不输出任何信息,用于写脚本时的判断,和&>/dev/null一样

grep -c :计算找到匹配项的行数,1行算1次。只显示行数,不显示匹配到的行内容

grep -i :不区分字符大小写

grep -B 数字:before显示匹配行,和其上面n行

grep -A 数字:after显示匹配行,和其下面n行

grep -C 数字:显示匹配行,和上下n行

grep -e :实现多个选项间的逻辑or关系,例如grep -e 'cat' -e 'dog' filename

grep -w :匹配整个词,用空格、特殊符号隔开的都算一个词

grep -f 后面跟文件,文件中写正则表达式,各个表达式相当于或关系

grep -f f1 f2   #两个文件取交集

grep -E 使用egrep

grep -F 使用fgrep

PATTEN正则表达式:是一类字符所书写出的模式(pattern)

元字符:不表示字符本身的意义,用于额外功能性的描述

基本正则表达式(grep)的元字符:

字符匹配:

.:元字符,代表任意一个字符,包括空格

\.:表示.本身,"\"斜杆是逃逸符后面可接, ! ` [ .

[ ]:指定范围内的任意单个字符

[^]:指定范围外的任意单个字符

[A-Z],[[:upper:]]所有大写字母

[a-z],[[:lower:]]所有小写字母,和通配符匹配文件名有区别

[[:alpha:]]所有字母,大小写

[0-9],[[:digit:]]所有数字

[[:alnum:]]所有数字+字母

[[:blank:]]空白字符(空格和制表符)

[[:space:]]水平和垂直的空白字符(比[:blank:]包含的范围广)

[^[:space:]]非空白字符

[[:graph:]]可打印的非空白字符

[[:print:]]可打印字符

[[:punct:]]标点符号

[[:cntrl:]]不可打印的控制字符(退格、删除、警铃)

次数匹配:用来指定匹配其前面的字符的次数

*:任意次

例如:x*y,xxy,xy,y,指的是x可以出现0,1或者多次

.*:匹配任意长度的任意字符

\?:0次或1次

例如:x\?y,xy,y,xxy

贪婪模式:尽可能的长的去匹配字符

\+:至少1次

\{m\}:匹配m次,此处的两个\\是转义字符

\{m,n\}:匹配至少M次,至多n次

\{m,\}:匹配至少M次

\{0,n\}:匹配至多n次

  例如:x\{2,6\}y匹配xxy,xxxy,xxxxy,xxxxxy,xxxxxxy

位置锚定:用于指定字符出现的位置

^:锚定行首

$:锚定行尾

例如:^[[:space:]]\+$  空白组成的行

\<char:锚定词首,\bchar  数字、字母、下划线连起来的都算单词,其他符号都算分隔符

char\>:锚定词尾,char\b

  例如: \<h..o\>,以h开头,o结尾中间跟任意两个字符的单词

    分组:

\(\)

\(ab\)*xy    xy,abxy,ababxy

引用:

\1:后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式的结果字符串

\2

\(a.b\)xy\1  a6bxya6b

或者:

\|  a\|bcd     a或者bcd,整个字符串或者

举例:

、显示/proc/meminfo文件中以大小写s开头的行
# grep "^[Ss]" /proc/meminfo
# grep -i "^s" /proc/meminfo 、取出默认shell为非bash的用户
# grep -v "bash$" /etc/passwd | cut -d: -f 、取出默认shell为bash的且ID号最大的用户
# grep "bash$" /etc/passwd | sort -t: -k3 -rn|head -|cut -d: -f1 、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面至少一个空白字符,而后至少一个非空白字符的行
# grep "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.sysinit 、显示/boot/grub/grub.conf中至少一个非空白字符开头的行
# grep "^[^[:space:]]\{1,\}" /boot/grub/grub.conf 、找出/etc/passwd文件中一位数或两位数
# grep "\<[0-9]\{1,2\}\>" /etc/passwd 、查看当前系统上root用户的所有信息
# grep "^root\>" /etc/passwd 、添加用户bash和testbash、basher,而后找出当前系统上其用户名和默认shell相同的用户
# grep "^\([[:alnum:]]\{1,\}\)\>.*\1$" /etc/passwd 、匹配所有非空白行
#grep "." a.txt 、取目录名
# grep -Eo ".*\<"
# grep -Eo ".*[^/]" | grep -Eo ".*/" 、取基名
# grep -Eo "[^/]+/?$" 、匹配空行
# grep ^$ file 、匹配非空行
# grep -v ^$ file 或 grep .\+ file 、匹配0.0.0.~255.255.255.255
grep --color=auto -o "\(\<\([0-9]\|[1-9][0-9]\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)\>\.\)\{3\}\<\([0-9]\|[1-9][0-9]\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)\>" 、匹配实际IP地址1.0.0.-223.255.255.255
grep --color=auto -o "\<\([1-9]\|[1-9][0-9]\|1[0-9]\{2\}\|2[0-1][0-9]\|22[0-3]\)\>\(\.\<\([0-9]\|[1-9][0-9]\|1[0-9]\{2\}\|2[0-4][0-9]\|25[0-5]\)\>\)\{3\}"

egrep:使用扩展正则表达式来创建模式,相当于 grep -E

元字符:

字符匹配:

.:任意单个字符

[ ]:指定范围内的任意单个字符

[^ ]:指定范围外的任意单个字符

次数匹配:

*:匹配其前面的字符任意次

?:匹配前面的字符0或1次

+:匹配前面的字符至少1次

{m}:匹配前面的字符m次   区别于普通正则表达式

{m,n}:至少m,至多n次

{m,}:至少m次

{0,n}:至多n次

锚定

^:行首

$:行尾

\<, \b :词首

\>, \b :词尾

分组:

():分组

Linux命令:grep命令 | egrep命令的更多相关文章

  1. Linux中grep和egrep命令详解

    rep / egrep 语法: grep  [-cinvABC]  'word'  filename -c :打印符合要求的行数-i :忽略大小写-n :在输出符合要求的行的同时连同行号一起输出-v ...

  2. grep、egrep命令用法

    何谓正则表达式 正则表达式,又称正规表示法.常规表示法(Regular Expression,在代码中常简写为regex.regexp或RE),是一类字符所书写的模式,其中许多字符不表示其字面意义,而 ...

  3. Linux正则表达式grep与egrep

    grep -io "http:/=[A-Z0-9]\{16\}" ./wsxf.txt >wsxf_urls.txt Linux正则表达式grep与egrep 正则表达式:它 ...

  4. Linux常用命令学习2---(文件搜索命令locate find、命令搜索命令whereis which、字符串搜索命令grep、帮助命令man)

     1.文件搜索命令:locate [文件名]    在后台数据库中按文件名搜索,搜索速度比find快,耗费资源更少    例子:locate test.txt,就会显示文件名包含 test.txt的所 ...

  5. linux中grep和egrep的用法

    1. grep简介 grep (global search regular expression_r(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大 ...

  6. grep与egrep命令

    greo -E 等同于 egrep grep常用两种方式 1.   grep -c python a.txt 2.   cat a.txt | grep -c python a.txt文件如下 i l ...

  7. linux中grep命令的使用

    转载:http://blog.csdn.net/universsky/article/details/8866402 linux中grep命令的使用 grep (global search regul ...

  8. Linux学习日志--文件搜索命令

    开头总结: 学习了Linux中的文件搜索命令find和locate,系统搜索命令whereis 和which ,字符串搜索命令grep,find和locate的差别和使用方法格式,什么是path环境变 ...

  9. Linux grep/egrep命令详解

    grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来 grep搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2. grep的规则表达式( ...

随机推荐

  1. pwnable.kr-flag-Writeup

    MarkdownPad Document *:first-child { margin-top: 0 !important; } body>*:last-child { margin-botto ...

  2. 手机CPU那些事

    原文:https://zhuanlan.zhihu.com/p/19923974 如今人们买手机,都比较关心采用了什么 CPU,因为 CPU 直接决定了这台手机的性能,CPU 之于手机 就好比人的大脑 ...

  3. 117. 填充每个节点的下一个右侧节点指针 II

    Q: 给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右 ...

  4. SPOJ Distinct Substrings

    给定一个字符串,求不相同子串个数.每个子串一定是某个后缀的前缀,那么原问题等价于求所有后缀之间的不相同子串个数.总数为n*(n-1)/2,再减掉height[i]的和就是答案 #include< ...

  5. ACM-ICPC实验室20.2.19测试-图论

    B.Harborfan的新年拜访Ⅱ 就是一道tarjan缩点的裸题. 建图比较麻烦 以后遇到这种建图,先用循环把样例实现出来,再对着循环写建图公式 #include<bits/stdc++.h& ...

  6. 页面布局 Wrap 组件 和 RaisedButton按钮

    一.RaisedButton 定义一个按钮 Flutter 中通过 RaisedButton 定义一个按钮.RaisedButton 里面有很多的参数,只讲简单的进行使用. return Raised ...

  7. IDEA启动报错-java.net.BindException: Address already in use: bind

    启动IDEA报错日志如下: Internal error. Please refer to http://jb.gg/ide/critical-startup-errors java.net.Bind ...

  8. python练习:编写一个程序,要求用户输入一个整数,然后输出两个整数root和pwr,满足0<pwr<6,并且root**pwr等于用户输入的整数。如果不存在这样一对整数,则输入一条消息进行说明。

    python练习:编写一个程序,要求用户输入一个整数,然后输出两个整数root和pwr,满足0<pwr<6,并且root**pwr等于用户输入的整数.如果不存在这样一对整数,则输入一条消息 ...

  9. Java连载81-枚举类型,生成五个不重复的随机数,集合简介

    一.枚举类型 1.枚举类型的格式就是enum+枚举类型的名称,可见下面的例子. package com.bjpowernode.java_learning; ​ public class D81_1_ ...

  10. Python爬虫:数据解析 之 xpath

    资料: W3C标准:https://www.w3.org/TR/xpath/all/ W3School:https://www.w3school.com.cn/xpath/index.asp 菜鸟教程 ...