Linux文本处理之grep

Linux 文本处理之grep

      我们经常会遇到只需要一个文件里的只言片语,比如从文件里获取一串字符或者样式,可以用cat +文件一个一个找,这样不仅效率低,而且海量的字符会让你奔溃的。这个时候需要了解一下文本处理三剑客,分别是 grep 文本过滤工具 ;sed 文本编辑工具 ;awk 文本报告生成器。

1.grep

英文全拼:Global search REgular expression and Print out the line(全面搜索正则表达式并把行打印出来)。grep是每个Linux发行版都预装的文件工具。

2.作用

强有力的文件模式搜索工具,根据用户指定的"模式"(由正则表达式字符及文本字符所编写的过滤条件)对目标文本逐行进行匹配检查并打印出匹配到的行。

3.语法

          grep [options] pattern [file...] 

grep命令选项:

--color=auto  关键字高亮显示

[[email protected] ~]# cat /etc/passwd |grep --color=auto 514
machao2:x:512:514::/root/app:/bin/bash
machao5:x:514:516::/root/machao1:/bin/bash

-v 关键字 显示不包含关关键字的行,取反

[[email protected] ~]# cat /etc/passwd |grep -v 1017
nologin:x:1013:1018::/home/nologin:/sbin/nologin
weiyan:x:1017:1024::/home/weiyan:/bin/bash

-i 关键字 忽略关键字的大小写

[[email protected] ~]# cat abc.txt 
aaAAbb
BBccCC
dd ee ff
Aa Bb
hello world
[[email protected] ~]# cat abc.txt |grep 'a'
aaAAbb
Aa Bb
[[email protected] ~]# cat abc.txt |grep 'A'
aaAAbb
Aa Bb
[[email protected] ~]# cat abc.txt |grep -i 'a'
aaAAbb
Aa Bb

-n 显示的结果每行前增加行号

[[email protected] ~]# cat abc.txt |grep -i -n 'a'
1:aaAAbb
4:Aa Bb

-c 仅显示找出的结果的行数

[[email protected] ~]# cat abc.txt |grep '[[:alpha:]]' -n
1:aaAAbb
2:BBccCC
3:dd ee ff
4:Aa Bb
5:hello world
[[email protected] ~]# cat abc.txt |grep '[[:alpha:]]' -n -c
5

-o 仅显示匹配到的关键字,不显示同行的其他内容

[[email protected] ~]# cat abc.txt |grep 'ee'
dd ee ff
[[email protected] ~]# cat abc.txt |grep -o 'ee'
ee

-q 不输出任何结果,静默

[[email protected] ~]# cat abc.txt |grep -q 'ee'
[[email protected] ~]# echo $?
0          (输入指令无结果显示,$?意思是变量保存最近的命令退出状态,结果为0表示正确)

-A #  显示关键字行及向下的n行

[[email protected] ~]# cat abc.txt |grep -A1 'ee'
dd ee ff
Aa Bb

-B #  显示关键字行及向上的n行

[[email protected] ~]# cat abc.txt |grep -B1 'ee'
BBccCC
dd ee ff

-C #  显示关键字行及向上n行和向下的n行

[[email protected] ~]# cat abc.txt |grep -C1 'ee'
BBccCC
dd ee ff
Aa Bb

-e 关键字1 -e 关键字2 ……  多个关键字之间是或的关系

[[email protected] ~]# cat abc.txt |grep -e aa -e ff -e BB
aaAAbb
BBccCC
dd ee ff

-w 关键字 匹配整个单词

[[email protected] ~]# cat abc.txt 
aaAAbb
BBccCC
dd ee ff
Aa Bb
aa AA BB
hello world
[[email protected] ~]# cat abc.txt |grep aa
aaAAbb
aa AA BB
[[email protected] ~]# cat abc.txt |grep -w aa
aa AA BB

-E 等于egrep 使用扩展正则表达式

-F 等于fgrep 不使用正则表达式

这仅仅是grep命令的开始,你可能已经注意到,它对于实现各种各样的需求简直是太有用了。除了这种我们运行的这种只有一行的命令,grep还可以写成c自动的shell脚本去执行。

4.正则表达式

        (1)由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义 ,而表示控制或通配的功能。程序支持:grep,sed,awk,vim, less,nginx,varnish等等

(2)分为两类:基本正则表达式(Basic Regular Expression 又叫Basic RegEx 简称BREs)

扩展正则表达式(Extended Regular Expression 又叫Extended RegEx 简称EREs)

Perl正则表达式 (Perl Regular Expression 又叫Perl RegEx 简称PREs)

(3)组成:一般字符:没有特殊意义的字符

特殊字符(meta字符):元字符,有在正则表达式中有特殊意义

(4)元字符及其在正则表达式上下文中的行为

\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置
* 匹配前面的子表达式零次或多次
+  匹配前面的子表达式一次或多次。+ 等价于 {1,}
?  匹配前面的子表达式零次或一次。? 等价于 {0,1}
{n} n 是一个非负整数,匹配确定的n 次
{n,} n 是一个非负整数,至少匹配n 次
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格
?  当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。
   非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串
.  匹配除 “\n” 之外的任何单个字符
$  匹配前面的正则表达式,在字符串或者行结尾处。BRE中仅在正则表达式的结尾处有特殊的含义,ERE中在任何位置都有特殊含义
[] 匹配方括号内的任一字符,其中可用连字符(-)指的连续字符的范围;^符号苦出现在方括号的第一个位置,则表示匹配不在列表中的任一字符
\< 或 \b 词首锚定,用于单词模式的左侧 
\> 或 \b 词尾锚定;用于单词模式的右侧 
\<PATTERN\> 匹配整个单词

(5) 字符集

[::alnum] : 数字字符                [:digit:] : 数字字符                [:punct:] : 标点符号字符    
[:alpha:] : 字母字符                [:graph:] : 非空格字符              [:space:] : 空格字符    
[:blank:] : 空格与定位字符          [:lower:] : 小写字母字符            [:upper:] : 大写字母字符    
[:cntrl:] : 控制字符                [:print:] : 可显示的字符            [:xdigit:] : 16进制数字

(6)常用正则表达式

^$                空行 
^[[:space:]]*$     空白行 
/<(.*)>.*<\/\1>|<(.*) \/>/     匹配HTML标记的正则表达式
/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //    匹配IP地址的正则表达式
"\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"   匹配IP地址的正则表达式
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*   匹配Email地址的正则表达式
http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?    匹配网址URL的正则表达式


原文地址:http://blog.51cto.com/13805636/2149653

时间: 2024-08-05 03:22:36

Linux文本处理之grep的相关文章

linux文本处理三剑客—grep

cat:concatenate 文本文件查看工具 cat [option] filename... -n:给显示出来的文本行加上编号 -b:非空行编号 -V:显示 ^ -E:显示行结束符$ -T:显示制表符 -A:显示所有控制符-A=-VET -s:压缩连续的空行成一行 如:cat /etc/fstab /etc/passwd 同时查看多个文件 df | cut -d: tac:文本文件查看工具 用法同cat 只是文件内容的行逆序显示 rec:文本文件查看工具    用法同cat 只是文本文件每

Linux文本处理工具——Grep

Grep简介 全名:Global search Regular expression and Print out the line. 功能:文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的行. Linux的三大文本处理工具之一,可以说学好grep命令无疑是重要的,可以说学好grep也是不容易的,因为grep里面要用到最烦人的正则表达式. grep语法格式 grep [option]... 'PATTERN' FILE... [option]:表示可以跟选项,

Linux文本处理&quot;三剑客&quot;--grep

稍微接触过linux都会知道有三个非常强大文本处理工具,那就是grep.sed和awk,想必都有听说过吧. Linux文本处理三剑客: grep, egrep, fgrep:文本过滤工具(模式:pattern): grep:基本正则表达式,支持-E,-F egrep:扩展正则表达式, 支持-G,-F fgrep:不支持正则表达式, sed:stream editor, 流编辑器:文本编辑工具: awk:Linux上的实现为gawk,文本报告生成器(格式化文本): 以上三款工具都支持正则表达式 正

Linux文本处理工具grep

文件查看工具:cat 将[文件]或标准输入组合输出到标准输出. -A, --show-all                                  等于-vET -b, --number-nonblank                           对非空输出行编号 -e                                              等于-vE -E, --show-ends                                 在每行结

Linux文本处理命令 -- grep

简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. Unix 的grep家族包括grep.egrep和fgrep.egrep和fgrep的命令只跟grep有很小不同.egrep是grep的扩展,支持更多的 re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词

Linux文本处理之 grep egrep

linux下文本处理三剑客 第一剑 grep, egrep, fgrep:文本搜索工具:基于"pattern"对给定文本进行搜索操作: 第二剑 sed:Stream EDitor,流编辑器,行编辑工具:文本编辑工具: 第三剑 awk:GNU awk,文本格式化工具:文本报告生成器: 今天主要讲解第一剑: grep家族: grep:  支持使用基本正则表达式: egrep:支持使用扩展正则表达式: grep: 不支持使用正则表达式: grep命令: 作用:文本搜索工具,根据用户指定的&q

Linux文本三剑客之grep

grep: Global search REgular expression and Print out the line. 作用:文本搜索工具,根据用户指定的"模式"对目标文本逐行进行匹配检查:打印匹配到的行 模式:由正则表达式字符及文本字符所编写的过滤条件 REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面意义,而表示控制或通配的功能 分两类: 基本正则表达式:BRE 扩展正则表达式:ERE(grep -E, egrep) 正则表达式引擎 grep [O

Linux文本处理三剑客(grep,sed,awk)

grep sed awk 原文地址:http://blog.51cto.com/10461810/2095182

linux文本三剑客匹配网卡IP地址大PK(CentOS 7系统)

    运维工程师在做配置的过程中很多时候都需要去获取目标服务器网卡上的IP地址,那究竟用什么方式获取更便捷了,博主今天就带大家使用linux文本三剑客分别获取一下网卡的IP地址,最后我们再来对比一下. 实验环境: 系统:CentOS 7.2 网卡张数:双网卡 linux文本三剑客之grep 获取ifconfig输出中的IP地址 ifconfig | egrep -o "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\>.(\