Linux环境每天用得最多的命令就是grep,这里把一些稍微进阶的用法整理一下
常用选项
可以参见man grep
或者grep命令,最常用的选项如下:
-v 反转查找
-w 只显示全字符合的列
-i 忽略字符大小写的差别
-o 只输出文件中匹配到的部分
-n 显示列号
-F 禁用正则表达式(用来搜索包含正则表达式特殊字符的的场景)
正则表达式
命令示例:
grep -E "[0-9]+" sentence.txt
-E 扩展的正则表达式
-P Perl正则表达式(支持一些高级用法,比如先行断言、后发断言、负向零宽断言等)
支持
# 特殊字符
[0-9] # 集合
[^0-9] #不在集合
(hello|world) # 或
\s #空字符(空格,Tab,换行)
\b # 字符开始
\w #数字、字母、下划线
^ # 行首
$ # 行尾
# 计数
?
*
+
{n}
{n,}
{,m}
{n,m}
\d
#一般正则表达式都有\d
,表示数字,grep不支持。可以使用[0-9]
表示
常见grep用法
- 单词出现的次数
grep -o word sentence.txt | wc -l
- 包含单词的行数
grep -c word sentence.txt
- 找到特定数字并反向排序
grep -Po "(?<=cost: )[0-9]+" all.log
这里使用了Perl正则
- kill进程
ps -ef | grep java | grep -v "grep" | awk '{print $2}' | xargs kill