1. grep最简单的用法,匹配一个词:grep word filename

2. 能够从多个文件里匹配:grep word filename1 filenam2 filename3

3. 能够使用正則表達式匹配:grep -E pattern f1 f2 f3...

4. 能够使用-o仅仅打印匹配的字符,例如以下所看到的:

lichao@ubuntu:command$ echo this is a line. | grep -E -o "[a-z]*\."
line.

5. 打印除匹配行之外的其它行,使用-v

lichao@ubuntu:command$ echo -e "1\n2\n3\n4" | grep -v -E "[1-2]"
3
4

6. 统计匹配字符串的行数。使用-c

lichao@ubuntu:command$ echo -e "1111\n2222" | grep -E "[1-2]" -c
2

7. 假设我们统计字符串模式匹配的次数。能够结合-o和-c。例如以下:

lichao@ubuntu:command$ echo -e "1111\n2222" | grep -o -E "[1-2]"  | wc -l
8

8. 假设须要显示行号,能够打开-n,例如以下:

lichao@ubuntu:command$ echo -e "1111\n2222\n33333\n44444" | grep -n -E "3"
3:33333

9. -b选项能够打印出匹配的字符串想对于其所在的行起始位置的偏移量(从0開始)。通常配合-o使用,例如以下:

lichao@ubuntu:command$ echo "0123456789" | grep -b -o 4
4:4

10. 当字符串在多个文件里匹配时。-l选项将仅仅打印文件名称

11. -L与-l相对。仅仅打印不匹配的文件名称

lichao@ubuntu:command$ cat test1.txt
linux
is
fun
lichao@ubuntu:command$ cat test2.txt
a
very
popular
os,
linux
lichao@ubuntu:command$ cat test3.txt
what
the
fxxk
lichao@ubuntu:command$ grep -l linux test1.txt test2.txt test3.txt
test1.txt
test2.txt
lichao@ubuntu:command$ grep -L linux test1.txt test2.txt test3.txt
test3.txt

12. 打开递归搜索功能

lichao@ubuntu:command$ grep -n -R linux .
./test2.txt:5:linux
./test1.txt:1:linux

13. 忽略大写和小写:-i

lichao@ubuntu:command$ echo "HELLO WORLD" | grep -i "hello"
HELLO WORLD

14. 匹配多个字符串模式

lichao@ubuntu:command$ echo "This is a line." | grep -e "This" -e "is" -e "line" -o
This
is
line

15. 用单独的文件提供匹配样式,每一个匹配的样式作为一行,例如以下例所看到的:

lichao@ubuntu:command$ cat pattern.txt
1$
2
3
lichao@ubuntu:command$ cat num.txt
1
2
3
4
5
6
7
8
9
10
lichao@ubuntu:command$ grep -f pattern.txt num.txt
1
2
3

16. 打印匹配行上下文信息,使用 -A n打印匹配行及其后n行信息。使用-B n打印匹配行及其前n行信息。使用 -C n。打印匹配行及其前后n行信息。假设有多重匹配,将使用--隔离。

示比例如以下:

lichao@ubuntu:command$ seq 1 10 | grep 5 -A 3
5
6
7
8
lichao@ubuntu:command$ seq 1 10 | grep 5 -B 3
2
3
4
5
lichao@ubuntu:command$ seq 1 10 | grep 5 -C 3
2
3
4
5
6
7
8
lichao@ubuntu:command$ echo -e "a\nb\nc\nd\na\nb\nc\nd\n" | grep a -A 2
a
b
c
--
a
b
c

17. 使用-q进入静默模式,该模式下。grep命令执行目的不过执行一个条件測试。通常在脚本中使用。通过检查其返回值进行下一步操作。示比例如以下:

lichao@ubuntu:command$ cat tmp.txt
hello
world
lichao@ubuntu:command$ cat tmp.csh
#!/bin/bash
if [ $# -ne 2 ]; then
echo "Usage: $0 match_pattern file_name"
exit
fi
match=$1
file=$2
grep -q $match $file
if [ $? -ne 0 ]; then
echo "$match not exist in $file"
else
echo "$match exist in $file"
fi
lichao@ubuntu:command$ ./tmp.csh hello tmp.txt
hello exist in tmp.txt

18. -Z选项在输出匹配文件名称时将以/0结尾配合xargs -0能够发挥非常多作用,比如删除匹配某个模式的文件例如以下:

lichao@ubuntu:command$ ls -llrt
total 28
-rw-rw-r-- 1 lichao lichao 13 Nov 1 20:38 test1.txt
-rw-rw-r-- 1 lichao lichao 27 Nov 1 20:39 test2.txt
-rw-rw-r-- 1 lichao lichao 14 Nov 1 20:39 test3.txt
-rw-rw-r-- 1 lichao lichao 21 Nov 1 20:45 num.txt
-rw-rw-r-- 1 lichao lichao 7 Nov 1 20:45 pattern.txt
-rw-rw-r-- 1 lichao lichao 12 Nov 1 21:25 tmp.txt
-rwxr-xr-x 1 lichao lichao 217 Nov 1 21:27 tmp.csh
lichao@ubuntu:command$ cat test1.txt
linux
is
fun
lichao@ubuntu:command$ cat test2.txt
a
very
popular
os,
linux
lichao@ubuntu:command$ grep "linux" * -lZ | xargs -0 rm
lichao@ubuntu:command$ ls
num.txt pattern.txt test3.txt tmp.csh tmp.txt

以上命令将包括linux字符串的test1.txt和test2.txt删除。

19. 排除/包含文件或者文件夹:1)--include *{.c,.cpp} 仅仅在文件夹中搜索.c和.cpp文件;2)--exclude "README" 排除全部README文件 3) --include-dir 仅在某些文件夹中搜索 4) --exclude-dir 排除某些文件夹 5) --exclude-from FILE 从文件FILE中读取须要排除的文件列表

lichao@ubuntu:test$ ls
dir1 dir2 exclude.config test1.txt test2.doc test3.word
lichao@ubuntu:test$ cat test1.txt
linux
is
fun
lichao@ubuntu:test$ cat test2.doc
wonderful
os,
linux
lichao@ubuntu:test$ cat test3.word
wonderful
os,
linux
lichao@ubuntu:test$ ls dir1/
test1.txt test2.doc test3.word
lichao@ubuntu:test$ ls dir2/
test1.txt test2.doc test3.word
lichao@ubuntu:test$ cat exclude.config
*.txt
lichao@ubuntu:test$ grep "linux" -R -n .
./test2.doc:3:linux
./test3.word:3:linux
./test1.txt:1:linux
./dir2/test2.doc:3:linux
./dir2/test3.word:3:linux
./dir2/test1.txt:1:linux
./dir1/test2.doc:3:linux
./dir1/test3.word:3:linux
./dir1/test1.txt:1:linux
lichao@ubuntu:test$ grep "linux" -R -n . --include *.txt --include *.doc
./test2.doc:3:linux
./test1.txt:1:linux
./dir2/test2.doc:3:linux
./dir2/test1.txt:1:linux
./dir1/test2.doc:3:linux
./dir1/test1.txt:1:linux
lichao@ubuntu:test$ grep "linux" -R -n . --exclude *.txt --eclude *.doc
grep: unrecognized option '--eclude'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
lichao@ubuntu:test$ grep "linux" -R -n . --exclude *.txt --exclude *.doc
./test3.word:3:linux
./dir2/test3.word:3:linux
./dir1/test3.word:3:linux
lichao@ubuntu:test$ grep "linux" -R -n . --exclude-dir dir1
./test2.doc:3:linux
./test3.word:3:linux
./test1.txt:1:linux
./dir2/test2.doc:3:linux
./dir2/test3.word:3:linux
./dir2/test1.txt:1:linux
lichao@ubuntu:test$ grep "linux" -R -n . --exclude-dir dir1 --exclude-dir dir2
./test2.doc:3:linux
./test3.word:3:linux
./test1.txt:1:linux
lichao@ubuntu:test$ grep "linux" -R -n . --exclude-from exclude.config
./test2.doc:3:linux
./test3.word:3:linux
./dir2/test2.doc:3:linux
./dir2/test3.word:3:linux
./dir1/test2.doc:3:linux
./dir1/test3.word:3:linux

已上即为grep经常使用的选项。

注意:转载请注明出处。

grep命令最经常使用的功能总结的更多相关文章

  1. grep命令的or,and,not操作的例子

    在Linux的grep命令中如何使用OR,AND,NOT操作符呢? 其实,在grep命令中,有OR和NOT操作符的等价选项,但是并没有grep AND这种操作符.不过呢,可以使用patterns来模拟 ...

  2. linux管道命令grep命令参数及用法详解---附使用案例|grep

    功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...

  3. grep 命令操作

    linux grep命令 1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressi ...

  4. 每天一个linux命令(39):grep 命令

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...

  5. 由一条Linux的grep命令说起

    今天在开发的时候,看到同事使用了这样的一条linux命令 grep 'class YourClass' -rwi * |grep -v svn 想到了 grep命令的,几个参数. -r 明确要求搜索子 ...

  6. liunx 的 grep命令(转载)

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

  7. linux命令学习(1):grep 命令

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...

  8. Linux之grep命令详解

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

  9. linux grep 命令

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...

随机推荐

  1. Centos7中 mysql5.7 用户 创建 、授权、远程登录

    1.添加用户跟以往版本不同,MySQL5.7 mysql.user表没有password字段,这个字段改成了 authentication_string:这里我们使用命令进行创建用户:  CREATE ...

  2. Java性能调优概述

    目录 Java性能调优概述 性能优化有风险和弊端,性能调优必须有明确的目标,不要为了调优而调优!!!盲目调优,风险远大于收益!!! 程序性能的主要表现点 执行速度:程序的反映是否迅速,响应时间是否足够 ...

  3. 第十三章:MFC库与Windows程序开发概述

    主要内容: 1.Windows程序的基本结构 2.MFC库简介 3.使用Visual C++开发Windows程序 具体内容略

  4. NLog在asp.net core中的应用

    Asp.net core中,自带的Log是在当selfhost运行时,在控制台中输出,不便于查阅,如果用一个log架框,把日志持久化,便于查询. NLog是一个免费的日志记录框架,专门为.net平台下 ...

  5. NBUT 1651 - Red packet (求运气王的钱数)(二分法)

    Description New Year is coming! Our big boss Wine93 will distribute some “Red Package”, just like Al ...

  6. python 中range和xrange的区别

    range() 相当于直接构造一个列表,而xrange() 是返回一个迭代值. range用法: range( 开始值,结束值,步长) 在需要大量迭代的时候,比较适合使用xrange()

  7. bzoj 2818 GCD 数论 欧拉函数

    bzoj[2818]Gcd Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Samp ...

  8. POJ1256 Anagram

    Time Limit: 1000MS   Memory Limit: 10000KB   64bit IO Format: %lld & %llu Submit Status Descript ...

  9. 【BZOJ1225】求正整数(数论)

    题意:对于任意输入的正整数n,请编程求出具有n个不同因子的最小正整数m. n<=50000 思路:记得以前好像看的是maigo的题解 n即为将m分解为质数幂次的乘积后的次数+1之积 经检验只需要 ...

  10. BZOJ1573: [Usaco2009 Open]牛绣花cowemb

    求半径d<=50000的圆(不含边界)内n<=50000条直线有多少交点,给直线的解析式. 一开始就想,如果能求出直线交点与原点距离<d的条件,那么从中不重复地筛选即可.然而两个kx ...