07、shell三剑客之grep

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

除了grep外,还有egrep,fgrep。

egrep是grep的扩展,相当于grep -E 。fgrep相当于grep -f,用的少

用法:grep [OPTION]......PATTERN[FILE].....

参数详解:

-E    模式是扩展正则表达式(ERE)
-F    模式是换行分隔固定字符串
-G    模式是基本正则表达式(BRE)
-P    模式是prel正则表达式
-e    使用模式匹配,可指定多个模式匹配
-f    从文件每一行获取模式
-i    忽略大小写
-w    匹配整个单词
-x    匹配整行
-v    反向匹配

输出控制:

-m;-max-count = NUM    输出匹配的结果num数
-n    打印行号
-H    打印每个匹配的文件名
-h    不输出文件名
-o    只打印匹配的内容
-q    不输出正常信息
-s    不输出错误信息
-r    递归目录
    --include=FILE_PATTERN        只搜索匹配的文件
    --exclude=FILE_PATTERN        跳过匹配的文件
    --exclude-from=FILE    跳过匹配的文件,来自文件模式
    --exclude-dir=    跳过匹配的目录

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

内容控制:

-B    打印匹配的前几行
-A    打印匹配的后几行
-C    打印匹配的前后几行
--color    匹配的字体颜色

例子:

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 "c"

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

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

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

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

6)只显示匹配的字符串

echo "这是一个测试" | grep -o ""

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

seq 1 20 | grep -m 5 -e "[0-9]{2}"

8)统计匹配的行数

seq 1 20 | grep -c -e "[0-9]{2}"

9)匹配b字符开头的行

echo "a b c d" | xargs -n1 | grep -e "^b"

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

echo "a ab abc abcd abcde" | xargs -n1 | grep -n "de$"

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

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

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

grep -r '192.168.1.1'/opt --exclude *.bak

13)排除来自文件中的文件

grep -r'192.167.1.1'/ opt --exclude-from文件

14)匹配41或41的数字

seq 41 45 | grep -E "4[12]"

15)匹配至少2个字符

seq 1 13 | grep -E '[0-9]{2}'

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

echo “a ab abc abcd abcde” | xargs -n1 | grep -E -w -o'[az] {2,3}'

17)匹配所有IP

ifconfig  | grep -E "([0-9]{1,3}.){3}[0-9]{1,3}"

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

seq 1 10 | grep 5 -A 3

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

seq 1 10 | grep 5 -B 3

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

seq 1 10 | grep 5 -C 3

21)不显示输出

#grep'a'abc
grep : abc :没有 这样的文件或目录 
#grep -s'a'abc
#echo $?
2
不显示正常输出:
#grep -q'a'a.txt

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

原文地址:https://www.cnblogs.com/hackerlin/p/12491190.html