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