linux grep 命令常见用法
在 linux 系统中,有三个强大的文本分析处理工具:grep sed awk,其中:
grep 用于搜索文本内容 => linux grep 命令常见用法
sed 用于编辑文本内容 => linux sed 命令常见用法
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”),则可以省略双引号
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
|--------------------------------------|