linux grep 命令常见用法

在 linux 系统中,有三个强大的文本分析处理工具:grep  sed  awk,其中:

grep   用于搜索文本内容      =>     linux grep 命令常见用法

sed    用于编辑文本内容       =>     linux sed  命令常见用法

awk   用于处理和生成报表    =>     linux awk 命令常见用法

 

grep 的工作原理是将文件内容逐行读入,然后在每一行数据中搜索符合条件的内容并打印出来

grep 命令的使用格式如下:

grep   “pattern”   file_name

在文件中搜索符合样式  pattern  的内容,并打印出来

这里的 pattern 一般是正则表达式,也可以是字符串(字符串也可以看成是一种简单的正则表达式)

下面结合实例简单介绍 grep 命令的常见用法:

假设文件 log.txt 的内容如下:

running syntax check ...
checked 100 lines,2 have errors
error: nothing matched !
error: cannot open the target !
syntax check finished!

 

1. 搜索出包含字符 error 的行

grep  error  log.txt
>>
checked 100 lines,2 have errors
error: nothing matched !
error: cannot open the target !

如果希望将搜索到的目标高亮出来,可以加上选项 “--color=auto”

grep  --color=auto  error  log.txt
>>
checked 100 lines,2 have errors
error: nothing matched !
error: cannot open the target !

为了方便,可以将这个选项添加到自己的 alias 文件中:

alias  grep  "grep  --color=auto"

 

2. 搜索以 error 开头的那些行

grep  "^error"  log.txt
>>
error: nothing matched !
error: cannot open the target !

这里的 "^error" 是正则表达式, 符号 "^" 表示一行的开头

注意正则表达式需要用双引号括起来,但是如果 pattern 是简单的字符串(比如 “error”),则可以省略双引号

 

2.1 搜索既包含 error 又包含 check 的行

 

grep "error\|check" log.txt
>>
checked 100 lines,2 have errors

 

注意这里的符号 “|” 要加上反斜杠转义

 

 

3. 统计文件 log.txt 中字符 error 出现的次数

grep  -c  error  log.txt
>>
3

注意:如果一行中有多个 error 字符,只会统计一次

 

4. 搜索不包含字符串 error 的那些行

grep  -v  error  log.txt
>>
running syntax check ...
syntax check finished!

选项 “-v ” 表示 反转搜索

 

5. 在目录下的所有文件中搜索

grep  -r  error  log

这里的 log 是一个目录,表示在 目录 log 和 log 的子目录下的所有文件中搜索字符串 error

 

6. 搜索 “在文件 A 中存在,但是在文件 B 中不存在” 的那些行

文件 log1.txt 的内容如下:

data[1]
data[2]
data[3]
data[4]
data[5]

文件 log2.txt 中的内容是:

data[1]
data[3]
data[4]

假设需要搜索 “在文件 log1.txt 中存在,但是在 log2.txt 中不存在” 的那些行

grep  -f  log2.txt  -vF  log1.txt
>>
data[2]
data[5]

这里的 -f 表示 “将文件的内容作为样式”,也就是将文件中的每一行都作为样式去搜索

而选项 -F 表示 “将样式当作文本,而不是正则表达式”,默认情况下, grep 会将 log2.txt 中的每一行当作一个正则表达式,然后去 log1.txt 中查找是否有匹配这些正则表达式的内容,所以  "data[1]" 如果被视为正则表达式,就只能搜索到包含 “data1” 的那些行,因为正则表达式 “[1]" 就表示数字 1 ;

所以上面这条命令就表示: 将 log2.txt 中的每一行当做常规字符串,去 log1.txt 中搜索是否有有相同的字符串,如果有,就排除掉,最后打印出 log1.txt 中剩下的行。

方法2: cat  log1.txt  log2.txt  | sort  | uniq -u

其中 uniq -u 表示只打印那些不重复的行

 

 

grep 命令的用法还有很多,以上只是列举了一些常见的用法,

如果希望深入学习,可以参考相关书籍或者直接访问 GNU grep 网站:

http://www.gnu.org/software/grep/manual/grep.html

 

 

|--------------------------------------|

 

 

posted @ 2020-05-19 16:30  いつまでも  阅读(5618)  评论(0编辑  收藏  举报