第七章 Shell文本处理三剑客之grep

   2017-01-06 0
核心提示:7.1 grep过滤来自一个文件或标准输入匹配模式内容。除了grep外,还有egrep、fgrep。egrep是grep的扩展,相当于grep -E。fgrep相当于grep -f,用的少。Usage: grep [OPTION]... PATTERN [FILE]...支持的正则描述-E,--extended-regexp模式是扩展正则表达式(ER

7.1 grep

过滤来自一个文件或标准输入匹配模式内容。

除了grep外,还有egrep、fgrep。egrep是grep的扩展,相当于grep -E。fgrep相当于grep -f,用的少。

Usage: grep [OPTION]... PATTERN [FILE]...

支持的正则

描述

-E,--extended-regexp 模式是扩展正则表达式(ERE)
-F,--fixed-strings 模式是换行分隔固定字符串
-G,--basic-regexp 模式是基本正则表达式(BRE)
-P,--perl-regexp 模式是Perl正则表达式
-e,--regexp=PATTERN 使用模式匹配,可指定多个模式匹配
-f,--file=FILE 从文件每一行获取模式
-i,--ignore-case 忽略大小写
-w,--word-regexp 模式匹配整个单词
-x,--line-regexp 模式匹配整行
-v,--invert-match 打印不匹配的行

输出控制

描述

-m,--max-count=NUM 输出匹配的结果num数
-n,--line-number 打印行号
-H,--with-filename 打印每个匹配的文件名
-h,--no-filename 不输出文件名
-o,--only-matching 只打印匹配的内容
-q,--quiet 不输出正常信息
-s, --no-messages 不输出错误信息

-r,--recursive

--include=FILE_PATTERN

--exclude=FILE_PATTERN

--exclude-from=FILE

--exclude-dir=PATTERN

递归目录。

只搜索匹配的文件。

跳过匹配的文件。

跳过匹配的文件,来自文件模式。

跳过匹配的目录

-c,--count 只打印每个文件匹配的行数

内容行控制

描述

-B,--before-context=NUM 打印匹配的前几行
-A,--after-context=NUM 打印匹配的后几行
-C,--context=NUM 打印匹配的前后几行
--color[=WHEN], 匹配的字体颜色

博客地址:http://lizhenliang.blog.51cto.com

QQ群:323779636(Shell/Python运维开发群)

示例:

1) 输出b文件中在a文件相同的行

# grep -f a b

2) 输出b文件中在a文件不同的行

# grep -v -f a b

3) 匹配多个模式

# echo "a bc de" |xargs -n1 |grep -e 'a' -e 'bc'
a
bc

4) 去除空格http.conf文件空行或开头#号的行

# grep -E -v "^$|^#" /etc/httpd/conf/httpd.conf

5) 匹配开头不分大小写的单词

# echo "A a b c" |xargs -n1 |grep -i a
或
# echo "A a b c" |xargs -n1 |grep '[Aa]'
A
a

6) 只显示匹配的字符串

# echo "this is a test" |grep -o 'is'
is
is

7) 输出匹配的前五个结果

# seq 1 20  |grep -m 5 -E '[0-9]{2}'
10
11
12
13
14

8)统计匹配多少行

# seq 1 20  |grep -c -E '[0-9]{2}'
11

9) 匹配b字符开头的行

# echo "a bc de" |xargs -n1 |grep '^b'
bc

10) 匹配de字符结尾的行并输出匹配的行

# echo "a ab abc abcd abcde" |xargs -n1 |grep -n 'de$'
5:abcde

11) 递归搜索/etc目录下包含ip的conf后缀文件

# grep -r '192.167.1.1' /etc --include *.conf

12) 排除搜索bak后缀的文件

# grep -r '192.167.1.1' /opt --exclude *.bak

13) 排除来自file中的文件

# grep -r '192.167.1.1' /opt --exclude-from file

14) 匹配41或42的数字

# seq 41 45 |grep -E '4[12]'
41
42

15) 匹配至少2个字符

# seq 13 |grep -E '[0-9]{2}'
10
11
12
13

16) 匹配至少2个字符的单词,最多3个字符的单词

# echo "a ab abc abcd abcde" |xargs -n1 |grep -E -w -o '[a-z]{2,3}'
ab
abc

17) 匹配所有IP

# ifconfig |grep -E -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"

18) 打印匹配结果及后3行

# seq 1 10 |grep 5 -A 3
5
6
7
8

19) 打印匹配结果及前3行

# seq 1 10 |grep 5 -B 3
2
3
4
5

20) 打印匹配结果及前后3行

# seq 1 10 |grep 5 -C 3
2
3
4
5
6
7
8

21) 不显示输出

不显示错误输出:

# grep 'a' abc
grep: abc: No such file or directory
# grep -s 'a' abc
# echo $?
2
不显示正常输出:
# grep -q 'a' a.txt

grep支持上一章的基础和扩展正则表达式字符。

 
标签: Linux命令 Shell
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 每天一条linux命令——halt
    halt命令用来关闭正在运行的Linux操作系统。halt命令会先检测系统的runlevel,若runlevel为0或6,则关闭系统,否则即调用shutdown来关闭系统。 语法:halt(选项)选项:-d:不要在wtmp中记录;-f:不论目前的runlevel为何,不调用shutdown即强制关闭系统;-i:
    02-10
  • 几个linux命令查看堆栈内存问题 几个linux命令
      公司编写代码,发现整个在程序里面调用system时候总是失败,原因是can't allocate memory ,根本原因不是内存不足,而是堆栈内存不够。使用ulimit -s 2048后有所好转但是发现一旦系统进程开启多了后仍然会挂。后来使用objdump -x 后发现了原因有个动态库
    02-09
  • Linux命令总结--rm命令 linux的rmp命令
    (来源于http://www.cnblogs.com/xqzt/p/5398919.html)1、命令简介rm(Remove file 删除目录或文件)删除文件,对于链接文件,只是删除整个链接文件,而原有文件保持不变。新手在删除文件之前一定要知道这些:很重要1.可以用mv代替rm的绝对不要用rm,不要着急
    02-09
  • Linux命令行批量创建目录详解 linux创建目录
    以前一直用-p创建目录链,觉得很方便了。在空目录/opt/app/myapp里创建src,再创建main,再创建javamkdir -p /opt/app/myapp/src/main/java没想到还可以这样玩##¥%……*(root@vm1:~/tmp# mkdir -p src/{{main,test}/{java,resources},main/webapp}root@vm1:
    02-09
  • Linux命令之乐--script和scriptplay
    script和scriptplay可以把终端会话记录到一个文件中,可以用来制作命令行教学视屏。 开始录制会话[root@new test]# script -t 2timing.log -a output.sessionScript started, file is output.session[root@new test]# echo hellohello[root@new test]# echo
    02-09
  • java 开发常用的Linux命令
    1.查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件。find . -name "*.xml" 递归查找所有的xml文件find . -name "*.xml" |xargs grep "hello world" 递归查找所有文件内容中包含hello world的xml文件grep -H 'spring' *.xml 查找所
    02-09
  • 常用Linux命令整理 Linux常用命令总结
    常用Linux命令整理常见系统命令export 查看或修改环境变量# 例:临时修改命令提示符为字符串$export PS1=$# 例:临时修改命令提示符显示系统时间 时间使用\t 表示export PS1="[\u@\h \t \W]\$"man 查看linux系统的手册# 例:查看ls命令如何使用man ls # 回车
    02-09 Linux
  • linux命令行—《命令行快速入门》 linux常用命令csdn
    linux命令行—《命令行快速入门》 linux常用命
    pwd print working directory 打印工作目录hostname my computer's network name 电脑在网络中的名称mkdir make directory 创建路径cd change directory 改变路径ls list directory 列出路径下的内容rmdir remove directory 删除路径pushd push directory 推
    02-09
  • Linux命令(五) 五个常用的linux命令
    Linux命令(五) 五个常用的linux命令
    jenkins触发钉钉报警机制1、安装钉钉插件钉钉报警需要安装Ding Talk插件,支持钉钉报警2、打开钉钉创建钉钉机器人2.1选择机器人类型——自定义2.2添加机器人2.3填写机器人信息填写机器人姓名—设置安全设置为加密类型,并复制出来加密值2.4创建完成保持webhoo
    02-09
  • 03_Linux基础-文件类型-主辅提示符-第1提示符-Linux命令-内外部命令-快捷键-改为英文编码-3个时间-stat-其他基础命令
    03_Linux基础-文件类型-主辅提示符-第1提示符-L
    03_Linux基础-文件类型-主辅提示符-第1提示符-Linux命令-内外部命令-快捷键-改为英文编码-3个时间-stat-{1..100}-du-cd-cp-file-mv-echo-id-shell-ln-env-set-which-rpm-/usr-/与/root-hostname-vim-cat-pwd-alias-unalias-ls-ASCII-wc-chmod博客
    02-09
点击排行