Linux命令之乐--grep

摘要:
$catdemo_文件THISLINEISTHE1STOPERCASELINEINTHISFILE。该行是该文件中的第1个下行。此行包含大写单词的所有首个字符。上面的两层是空的。这是最后一行。1.grep从单个文件中搜索指定字符串的基本用法是从指定文件中搜索特定字符串,如下例所示。语法:grep“literal_string”filename$grep“this”demo_文件此行是此文件中的第一个小写行。上面的两层是空的。这是最后一行。2.在多个文件中检索指定的字符串语法:grep“string”FILE_ PATTERN首先复制演示文件_文件是demo_ file1grep的结果将在限定行之前包含文件名。当文件名包含元字符时,Linux shell会将所有匹配的文件作为$grep-i“the”demo_FileTHISLINEISTHE1STOPERCASELINEINTHISFILE输入到grep中。该行是该文件中的第1个下行。此行包含大写单词的所有首个字符。4.使用正则表达式语法:grep“REGEX”filename如果您可以有效地使用正则表达式,这是一个非常有用的功能$grep-i“是”demo_ fileTHISLINEISTHE1STUPPERCASELINEINTHISFILE“。该行是文件中的第一个小写行。该行具有所有的首个字符TheWordWithUpperCase。该行上方的行是空的。这是最后一行。以下示例使用-w选项。请注意,结果不包含“ThisLineHasAllItsFirstCharacterOfTheWordWithUpperCase”,尽管“This”包含“is”。

正则表达式基本组成部分

正则表达式

描述

示例

^

行起始标记

^tux 匹配以tux起始的行

$

行尾标记

tux$ 匹配以tux结尾的行

.

匹配任意一个字符

Hack. 可以匹配Hacki,但不可以匹配Hackia

[]

匹配[]中的任意一个字符

coo[kl] 可以匹配cookcool

[^]

匹配除[^字符]任意一个字符

9[^01] 可以匹配92,93但不可以匹配9091

[-]

匹配指定范围的任意一个字符

[1-5] 匹配1~5中的任意一个数字

?

匹配之前的项一次或零次

colou?r 匹配colorcolour,不能匹配colouur

+

匹配之前项1次或多次

no-9+ 匹配no-9,no-99,不能匹配no-

*

匹配之前的项0次或多次

co*l 匹配clcolcool

()

创建一个用于匹配的子串

ma(tri)?x 匹配maxmatrix

{n}

匹配之前的项n

[0-9]{3},匹配

   

{n,}

之前的项至少匹配n

[0-9]{2,} 匹配任意一个两位数或更多位的数

{n,m}

匹配之前项目在n~m之间

[0-9]{2,5} 匹配任意的两位数或者五位数

|

交替匹配两边任意一项

Oct 1st | 2nd匹配Oct 1st或者Oct 2nd

转义

a.b 匹配a.b 不能匹配acb

首先创建我们练习grep命令时需要用到的demo文件demo_file。

$ cat demo_file
THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.
this line is the 1st lower case line in this file.
This Line Has All Its First Character Of The Word With Upper Case.

Two lines above this line is empty.
And this is the last line.
1.从单个文件中搜索指定的字串
grep的基础用法是如下例的从指定的文件中搜索特定的字串。
语法:
grep "literal_string" filename

 

$ grep "this" demo_file
this line is the 1st lower case line in this file.
Two lines above this line is empty.
And this is the last line.
2. 在多个文件中检索指定的字串
语法:
grep "string" FILE_PATTERN


先拷贝demo_file为demo_file1。grep的结果在符合条件的行前将包括文件名。当文件名包含元字符时,linux shell会将匹配的所有文件作为输入到grep中去。

 

$ cp demo_file demo_file1

$ grep "this" demo_*
demo_file:this line is the 1st lower case line in this file.
demo_file:Two lines above this line is empty.
demo_file:And this is the last line.
demo_file1:this line is the 1st lower case line in this file.
demo_file1:Two lines above this line is empty.
demo_file1:And this is the last line.
3. 用 grep -i 进行大小写无关的搜索
语法:
grep -i "string" FILE


也是一个基本用法,对搜索的字串忽略大小写,因此下例中匹配“the”, “THE” and “The”。

 

$ grep -i "the" demo_file
THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.
this line is the 1st lower case line in this file.
This Line Has All Its First Character Of The Word With Upper Case.
And this is the last line.
4. 使用用正则表达式
语法:
grep "REGEX" filename


如果你能有效地利用正则表达式,这是个很有用的特点。在下面的例子中,搜索全部以“lines”开始以“empty”结束的字串,如搜索“lines[之间任意字]empty” ,并且忽略大小写。

 

$ grep -i "lines.*empty" demo_file
Two lines above this line is empty.

 

正则表达式遵循的几个重复的操作

  • ? 最多匹配一次
  • * 匹配零次或者任意多次
  • + 匹配一次以上
  • {n} 匹配n次
  • {n,} 最少匹配n次
  • {,m} 最多匹配m次
  • {n,m} 匹配n到m次
5. 用grep -w搜索整个词,而不是词中的部分字串

使用-w选项搜索一个单词,并且避免搜索到词中的部分字串。

下例搜索"is"。如果不加-w选项,将显示“is”, “his”, “this” 等所有包含“is”的行。

$ grep -i "is" demo_file
THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.
this line is the 1st lower case line in this file.
This Line Has All Its First Character Of The Word With Upper Case.
Two lines above this line is empty.
And this is the last line.


下例使用了-w选项,请注意结果中不包含 “This Line Has All Its First Character Of The Word With Upper Case”, 虽然 “This”中包含“is”。

$ grep -iw "is" demo_file
THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE.
this line is the 1st lower case line in this file.
Two lines above this line is empty.
And this is the last line.
6. 使用grep -A, -B and -C显示之前、之后、前后的几行

当使用grep搜索大文件时,显示匹配行附近的多行数据是一个很有用的功能。


创建如下文件

$ cat demo_text
4. Vim Word Navigation

You may want to do several navigation in relation to the words, such as:

* e - go to the end of the current word.
* E - go to the end of the current WORD.
* b - go to the previous (before) word.
* B - go to the previous (before) WORD.
* w - go to the next word.
* W - go to the next WORD.

WORD - WORD consists of a sequence of non-blank characters, separated with white space.
word - word consists of a sequence of letters, digits and underscores.

Example to show the difference between WORD and word

* 192.168.1.1 - single WORD
* 192.168.1.1 - seven words.
6.1 显示匹配行之后的N行

-A

语法:
grep -A "string" FILENAME


下例显示匹配行和之后的3行数据

$ grep -A 3 -i "example" demo_text
Example to show the difference between WORD and word

* 192.168.1.1 - single WORD
* 192.168.1.1 - seven words.
6.2显示匹配行之前的N行

-B

语法:
grep -B "string" FILENAME


下例显示匹配行和之前的2行数据

$ grep -B 2 "single WORD" demo_text
Example to show the difference between WORD and word

* 192.168.1.1 - single WORD
6.3显示匹配行前后的N行

-C 显示之前的n行,之后的n行数据.

$ grep -C 2 "Example" demo_text
word - word consists of a sequence of letters, digits and underscores.

Example to show the difference between WORD and word

* 192.168.1.1 - single WORD
7.通过GREP_OPTIONS高亮显示搜索的字串

如果你希望搜索的字串高亮显示在结果中,可以试用以下的办法。

通过修改GREP_OPTIONS对搜索字串高亮显示。

 

$ export GREP_OPTIONS='--color=auto' GREP_COLOR='100;8'

$ grep this demo_file
this line is the 1st lower case line in this file.
Two lines above this line is empty.
And this is the last line.
8. 用grep -r递归搜索全部的文件

如果想查找当前目前以及其子目录的全部文件时,可以使用 -r 选项。如下例

$ grep -r "ramesh" *
9. 使用grep -v进行不匹配

可以使用-v选项显示不匹配搜索字串的行。下例显示demo_text文件中不包含“go”的行

$ grep -v "go" demo_text
4. Vim Word Navigation

You may want to do several navigation in relation to the words, such as:

WORD - WORD consists of a sequence of non-blank characters, separated with white space.
word - word consists of a sequence of letters, digits and underscores.

Example to show the difference between WORD and word

* 192.168.1.1 - single WORD
* 192.168.1.1 - seven words.
10. 显示不匹配全部模式的行
语法:
grep -v -e "pattern" -e "pattern"

 

创建如下例子文件

$ cat test-file.txt
a
b
c
d

$ grep -v -e "a" -e "b" -e "c" test-file.txt
d
11.用grep -c 统计匹配的行数
语法:
grep -c "pattern" filename

 

$ grep -c "go" demo_text
6


统计不匹配的行数

$ grep -v -c this demo_file
4
12. 用grep -l 只显示文件名
$ grep -l this demo_*
demo_file
demo_file1
13. 只显示匹配的字串

缺省显示匹配字串的所在行,可以使用-o选项只显示匹配的字串。这项功能当使用正则表达式时比较有用处。

$ grep -o "is.*line" demo_file
is line is the 1st lower case line
is line
is is the last line
14. 显示匹配的位置
语法:
grep -o -b "pattern" file

 

$ cat temp-file.txt
12345
12345

$ grep -o -b "3" temp-file.txt
0:3
6:3


注意: 以上输出显示的不是行内的位置,而是整个文件中的字节byte位置

15. 用 grep -n 在输出时显示行号

行号从1开始

$ grep -n "go" demo_text
5: * e - go to the end of the current word.
6: * E - go to the end of the current WORD.
7: * b - go to the previous (before) word.
8: * B - go to the previous (before) WORD.
9: * w - go to the next word.
10: * W - go to the next WORD.

免责声明:文章转载自《Linux命令之乐--grep》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(二)【windows】Jupyter Notebook 安装与简单使用(pip安装方式) |配置文件存放位置|配置jupyter使用虚拟环境下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Ubuntu 16.04LTS修改开机启动项

装上Ubuntu16.04后,每次开机都得手选开机项,挺麻烦 sudo vi /etc/default/grub GRUB_DEFAULT=0GRUB_HIDDEN_TIMEOUT=0GRUB_HIDDEN_TIMEOUT_QUIET=trueGRUB_TIMEOUT=10GRUB_DISTRIBUTOR=`lsb_release -i -s 2>...

Linux系统目录结构

Linux系统目录结构图 目录:/ 是Linux的根目录 每个文件和目录从根目录开始,只有root用户具有该目录下的写权限; /root是root用户的主目录,这与 / 目录不一样; 目录:/bin 用户二进制文件目录 包含二进制可执行文件; 在单用户模式下,需要使用的常见linux命令都位于该目录下;系统的所有用户使用的命令都设置在这里; 目录:/sb...

Linux安装loadrunner负载机【转】

1、loadrunner下载地址:http://download.csdn.net/download/intel80586/9542271或者其他资源 2、首先用rpm -qa|grep -i c++命令确认服务器是否已经安装了compat-libstdc++-33-3.2.3-61.i386.rpm,若没有下载安装下载地址:http://vdisk.we...

Redis——集群(cluster)

前言 在前面的文章中,已经介绍了Redis的几种高可用技术:持久化、主从复制和哨兵,但这些方案仍有不足,其中最主要的问题是存储能力受单机限制,以及无法实现写操作的负载均衡。 Redis集群解决了上述问题,实现了较为完善的高可用方案。本文将详细介绍集群。 主要内容包括:集群的作用;集群的搭建方法及设计方案;集群的基本原理;客户端访问集群的方法;以及其他实践中...

Spyder——科学的Python开发环境

刚开始接触Python的时候,网上找到的资料基本上上来就是介绍Python语言,很少有对开发环境进行讲解的,但如果在学习的过程中不断练习,这样效率会更高,所以特意将一个Python的开发环境Spyder自带的入门教程翻译出来,希望可以帮助到和我有同样困惑的你。 个人水平有限,会有翻译不到位的地方,欢迎批评指正! Spyder是使用Python编程语言进行科...

访问ActiveMQ前台界面

1、关闭windows防火墙 根据自己是win7还是win10百度如何关闭Windows防火墙,这里不做过多赘述. 2、关闭Linux防火墙(查看Linux防火墙是否关闭,如果未关闭,按照下列方法进行关闭(CentOS6.8).) // 使用sudo service iptables status命令来查看防火墙的状态 [root@CentOS64 bin...