本文首发于我的公众号码农之屋(id: Spider1818),专注于干货分享,包含但不限于Java编程、网络技术、Linux内核及实操、容器技术等。欢迎大家关注,二维码文末可以扫。
一、简介
grep是一种搜索类命令,用于过滤或搜索特定字符,可搭配正则表达式使用。grep家族还包括了egrep和fgrep。
二、命令格式
grep [option] pattern file == grep[参数] [匹配模式] [查找的文件]
三、常用option
option | 说明 |
-c | 显示符合条件的行数 |
-i | 查询时忽略大小写 |
-o | 只显示匹配pattern部分 |
-n | 显示符合条件的行标号 |
-r | 当查询对象非文件而是目录,则需使用该参数,用于递归查询 |
-v | 显示不匹配条件的行 |
-E | grep -E = egrep,除了基本正则表达式外,还可以使用扩展正则表达式 |
-F | grep -F = fgrep,使用任何正则表达式中的元字符表示其自身字面意义,不再特殊 |
--color=auto | 将匹配信息用颜色标亮 |
备注:
1)pattern如果是表达式或超过2单词,则需用引号进行引用。可用单引号和双引号,区别在于单引号看到的是什么就是什么,不管是常量还是变量都不会发生替换。
2)其他选项请man grep命令进行查询。
四、grep示例
示例文本信息:
root@LTY:/opt# cat test.txt
littletangyuan test1
abcdefg
LittleTangyuan
hijklmn
littletangyuan test2
opqrst
LITTLETANGYUAN
uvwxzy
LittleTangyuan
[A-Z]...[0-9]
1)统计包含字符串`little tangyuan`的行数
root@LTY:/opt# grep -c "little tangyuan" test.txt
2
2)不区分被搜索字符串大小写,找出包含字符串`little tangyuan`的行
root@LTY:/opt #grep -i "little tangyuan" test.txt
little tangyuantest1
Little Tangyuan
little tangyuantest2
LITTLE TANGYUAN
Little Tangyuan
3)找出包含字符串`tangyuan`,并只显示匹配部分
root@LTY:/opt #grep -o "tangyuan" test.txt
tangyuan
tangyuan
4)找出包含字符串`little tangyuan`的行,将匹配信息标亮
root@LTY:/opt #grep --color=auto "little tangyuan" test.txt
little tangyuantest1
little tangyuantest2
5)找出包含字符串`little tangyuan`的行,并打印匹配行号
root@LTY:/opt #grep -n "little tangyuan" test.txt
1:littletangyuan test1
5:littletangyuan test2
6)搜索当前目录文件,找出包含字符串`little tangyuan`的行
root@LTY:/opt #grep -r "little tangyuan" ./
./test.txt:littletangyuan test1
./test.txt:littletangyuan test2
7)找出不包含字符串`little tangyuan`的行
root@LTY:/opt #grep -v "little tangyuan" test.txt
abcdefg
Little Tangyuan
hijklmn
opqrst
LITTLE TANGYUAN
uvwxzy
Little Tangyuan
8)在test.txt里找到字符`l`开头的行
root@LTY:/opt #grep "^l" test.txt
little tangyuantest1
little tangyuantest2
9)找出所有包含little或Little的行
root@LTY:/opt #egrep "little|Little" test.txt
little tangyuantest1
Little Tangyuan
little tangyuantest2
Little Tangyuan
10)找到和字符串`[A-Z]...[0-9]`匹配的行,其中[A-Z]/.../[0-9]没有转义
root@LTY:/opt #fgrep "[A-Z]...[0-9]" test.txt
[A-Z]...[0-9]
我的公众号「码农之屋」(id: Spider1818) ,分享的内容包括但不限于 Linux、网络、云计算虚拟化、容器Docker、OpenStack、Kubernetes、SDN、OVS、DPDK、Go、Python、C/C++编程技术等内容,欢迎大家关注。