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支持上一章的基础和扩展正则表达式字符。