linux中使⽤grep命令详解
Linux grep命令
Linux grep命令⽤于查⽂件⾥符合条件的字符串;也可以⽤于查内容包含指定的范本样式的⽂件。它能使⽤正则表达式搜索,⽤于在⽂件中搜索指定的字符串模式,列出含有匹配模式⼦符串的⽂件名,并输出含有该字符串的⽂本⾏。
grep的⼯作⽅式是这样的:它在⼀个或多个⽂件中搜索字符串模板。如果模板包括空格,则必须被引⽤,模板后的所有字符串被看作⽂件名。搜索的结果被送到标准输出,不影响原⽂件内容。
基本语法:
grep [options] pattern [files]
[options]的主要参数:
-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查符合规则条件的⽂件内容,格式为每⾏⼀个规则样式。
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 : 在显⽰符合样式的那⼀⾏之前,标⽰出该⾏的列数编号。
-o 或 --only-matching : 只显⽰匹配PATTERN 部分。
-q 或 --quiet或--silent : 不显⽰任何信息。
-r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
-s 或 --no-messages : 不显⽰错误信息。
-
v 或 --revert-match : 显⽰不包含匹配⽂本的所有⾏。
-V 或 --version : 显⽰版本信息。
-w 或 --word-regexp : 只显⽰全字符合的列。
-x --line-regexp : 只显⽰全列符合的列。
-y : 此参数的效果和指定"-i"参数相同。
-?:同时显⽰匹配⾏上下的?⾏,如:grep -2 pattern filename同时显⽰匹配⾏的上下2⾏。
pattern正则表达式主要参数:
\:忽略正则表达式中特殊字符的原含义。
^:匹配正则表达式的开始⾏。
$:匹配正则表达式的结束⾏。
\<:从匹配正则表达式的⾏开始。
\>:到匹配正则表达式的⾏结束。
[]:单个字符,如[A]即A符合要求。
[ - ]:范围,如[A-Z],即A、B、C⼀直到Z都符合要求。
.:所有的单个字符。
*:有字符,长度可以为0。
代码⽰例:
⽰例1:在当前⽬录中,查前缀有“test”字样的⽂件中包含“test”字符串的⽂件,并打印出该字符串的⾏,此时,可以使⽤如下命令:
grep test test*
输出:
testfile1:This a Linux testfile! #列出testfile1 ⽂件中包含test字符的⾏
testfile_2:This is a linux testfile! #列出testfile_2 ⽂件中包含test字符的⾏
testfile_2:Linux test #列出testfile_2 ⽂件中包含test字符的⾏
⽰例2:反向查,通过"-v"参数可以打印出不符合条件⾏的内容。查⽂件名中包含test 的⽂件中不包含test 的⾏
grep -v test *test*
输出:
testfile1:helLinux!
testfile1:Linis a free Unix-type operating system.
testfile1:Lin
testfile_1:HELLO LINUX!
testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM.
testfile_1:THIS IS A LINUX TESTFILE!
testfile_2:HELLO LINUX!
testfile_2:Linux is a free unix-type opterating system.