linux下grep命令详解
- 格式:pdf
- 大小:86.29 KB
- 文档页数:4
linux下grep命令详解参数:
-a 或 --text : 不要忽略⼆进制的数据。
-A 或 --after-context= : 除了显⽰符合范本样式的那⼀列之外,并显⽰该⾏之后的内容。
-b 或 --byte-offset : 在显⽰符合样式的那⼀⾏之前,标⽰出该⾏第⼀个字符的编号。
-B 或 --before-context= : 除了显⽰符合样式的那⼀⾏之外,并显⽰该⾏之前的内容。
-c 或 --count : 计算符合样式的列数。
-C 或 --context=或- : 除了显⽰符合样式的那⼀⾏之外,并显⽰该⾏之前后的内容。
-d 或 --directories= : 当指定要查找的是⽬录⽽⾮⽂件时,必须使⽤这项参数,否则grep指令将回报信息并停⽌动作。
-e 或 --regexp= : 指定字符串做为查找⽂件内容的样式。
-E 或 --extended-regexp : 将样式为延伸的普通表⽰法来使⽤。
-f 或 --file= : 指定规则⽂件,其内容含有⼀个或多个规则样式,让grep查找符合规则条件的⽂件内容,格式为每⾏⼀个规则样式。-F 或 --fixed-regexp : 将样式视为固定字符串的列表。
-G 或 --basic-regexp : 将样式视为普通的表⽰法来使⽤。
-h 或 --no-filename : 在显⽰符合样式的那⼀⾏之前,不标⽰该⾏所属的⽂件名称。
-H 或 --with-filename : 在显⽰符合样式的那⼀⾏之前,表⽰该⾏所属的⽂件名称。
-i 或 --ignore-case : 忽略字符⼤⼩写的差别。
-l 或 --file-with-matches : 列出⽂件内容符合指定的样式的⽂件名称。
-L 或 --files-without-match : 列出⽂件内容不符合指定的样式的⽂件名称。
-n 或 --line-number : 在显⽰符合样式的那⼀⾏之前,标⽰出该⾏的列数编号。
-q 或 --quiet或--silent : 不显⽰任何信息。
-r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
-s 或 --no-messages : 不显⽰错误信息。
-v 或 --revert-match : 显⽰不包含匹配⽂本的所有⾏。
-V 或 --version : 显⽰版本信息。
-w 或 --word-regexp : 只显⽰全字符合的列。
-x --line-regexp : 只显⽰全列符合的列。
-y : 此参数的效果和指定"-i"参数相同。
1. grep最简单的⽤法,匹配⼀个词:grep word filename
2. 能够从多个⽂件⾥匹配:grep word filename1 filenam2 filename3
3. 能够使⽤正則表達式匹配:grep -E pattern f1 f2 f3...
4. 能够使⽤-o仅仅打印匹配的字符,例如以下所看到的:[root@zabbix net]# echo this is line. |grep -o "[a-z]*.$"line.
[root@zabbix net]# echo this is line. |grep -o "[a-z]*\."
line.
5. 打印除匹配⾏之外的其它⾏,使⽤-v:[root@zabbix net]# echo -e "1\n2\n3\n4"1
234
[root@zabbix net]# echo -e "1\n2\n3\n4"|grep -v "[1]"
2
3
4
[root@zabbix net]# echo -e "1\n2\n3\n4"|grep -v "[1-2]"
3
4
[root@zabbix net]# echo -e "1\n2\n3\n4"|grep -v -E "[1-2]"
3
4
6.统计匹配字符串的⾏数。使⽤-c
[root@zabbix net]# echo -e "1\n2\n3\n4"|grep "[1,2]" -c
2
7.统计字符串模式匹配的次数。能够结合-o。例如以下:前⾯的例⼦没有加 -o参数[root@zabbix net]# echo -e "11111\222"|grep "[1,2]"
11111\222[root@zabbix net]# echo -e "11111\222"|grep -o "[1,2]"
1
1
1
1
1
2
2
2
8.假设须要显⽰⾏号,能够打开-n,例如以下
[root@zabbix net]# echo -e "11111\n222"|grep -n -o "[1,2]"
1:1
1:1
1:1
1:1
1:12:22:2
2:2
[root@zabbix net]# echo -e "11111\n222"|grep -n "[1,2]"
1:11111
2:222
9. -b选项能够打印出匹配的字符串想对于其所在的⾏起始位置的偏移量(从0開始)。通常配合-o使⽤,例如以下:
[root@zabbix net]# echo "0123456789" | grep -b -o 4
4:4[root@zabbix net]# echo "012333456789" | grep -b -o 46:4
10.-P参数(声明grep后⾯要⽤的是正则表达式)
[root@zabbix net]# echo -e "\nline.123\nline."|grep -P "[a-z]*\.\d+"line.123[root@zabbix net]# echo -e "\nline.123\nline."|grep -P "[a-z]*\."
line.123
line.
[root@zabbix net]# echo -e "\nline.123\nline."|grep -P "[a-z]*\.$"
line.
[root@zabbix net]# echo -e "\nline.123\nline."|grep -P "\.$"
line.
11.匹配多个字符串模式
没有-o参数不会只打印匹配项
[root@zabbix ~]# echo "This is a line." | grep -e "This" -e "is" -e "line" -e "a"
This is a line.
添加-o参数之后只打印匹配项
[root@zabbix ~]# echo "This is a line." | grep -o -e "This"
This
[root@zabbix ~]# echo "This is a line." | grep -e "This" -e "is" -e "line" -e "a" -o
This
is
a
line
================================================================
参数oP⼀起使⽤,会单独打印出要匹配的数字
[root@zabbix a]# echo office365 | grep -oP '\d+'
365只有参数-P,会完整显⽰匹配内容的⼀⾏,匹配内容⾼亮显⽰[root@zabbix a]# echo office365 | grep -P '\d+'
office365只有参数-o,不会匹配任何内容,因为没有声明grep要使⽤正则表达式[root@zabbix a]# echo office365 | grep -o '\d+'
[root@zabbix a]#
===============================================================12.打印匹配⾏上下⽂信息,使⽤ -A n打印匹配⾏及其后n⾏信息。使⽤-B n打印匹配⾏及其前n⾏信息。使⽤ -C n。打印匹配⾏及其前后n⾏
信息。假设有多重匹配,将使⽤--隔离。[root@zabbix ~]# seq 1 10 | grep 5
5
[root@zabbix ~]# seq 1 10 | grep 5 -A 2
5
6
7
[root@zabbix ~]# seq 1 10 | grep 5 -A 2 -B 4
1
2
3
4
5
6
7
[root@zabbix ~]# seq 1 10 | grep 5 -C 2
3
4
5
6
7[root@zabbix ~]# echo -e "a\nb\nc\nd\na\nb\nc\nd"|grep b -A 1b
c
--
b
c
[root@zabbix ~]# echo -e "a\nb\nc\nd\na\nb\nc\nd"|grep b -B 1ab
--ab
[root@zabbix ~]# echo -e "a\nb\nc\nd\na\nb\nc\nd"|grep b -C 1
a
bc
--a
b
c
13.-Z选项在输出匹配⽂件名称时将以/0结尾配合xargs -0能够发挥⾮常多作⽤,⽐如删除匹配某个模式的⽂件例如以下:
[root@zabbix a]# echo linux >> a.txt
[root@zabbix a]# echo linux >> b.txt
[root@zabbix a]# echo li >> c.txt
[root@zabbix a]# grep -lZ "linux" *|xargs -0 rm
[root@zabbix a]# ls
c.txt
以上命令将包括linux字符串的a.txt和b.txt删除。
14.限定全字匹配选项:-w
[root@zabbix a]# grep -rn "li" *