linux汇总整理-grep篇

参数说明

--color:将匹配内容高亮显示(即使用的secureCRT,也能很明显的看出高亮)
-v:反向匹配,即不匹配
-i :忽略大小写
-c:打印匹配的行数(非个数)
-n:在匹配结果前打印所在行的行号
-w:匹配单词,即只搜索包含整个单词的行。例如搜索test时,会将test123、wertest等也匹配,加上-w参数后,就只匹配test。
-o:仅仅显示匹配出的字符,而不是匹配出的行(用正则表达式时比较方便)
-e [pattern]: --regexp=[pattern] 正则表达式,一般用在表达式 "-" 开头或者需要使用多个正则表达式的情景
-C [num] --context=[num] 打印前后 n 行
-B [num] --before-context=[num] 打印前 n 行
-A [num] --after-context=[num] 打印后 n 行
-m [num] --max-count=[num] 最多匹配 n 行后停止
-R/-r:两个个参数作用相同,都是递归搜索子目录下文件内容
-H:强制输出文件名(该参数无需手动添加,默认即为强制输出文件名的)
-h:禁止输出文件名(搜寻所个文件时,默认将匹配行所在文件的文件名也打印出来,其实是默认包含-H参数)
-l:只打印有匹配结果的文件名
-L:只打印没有匹配结果的文件名

举例

# 语法
grep ifm30 /etc/passwd
# 高亮显示匹配结果
grep --color ifm30 /etc/passwd
# 反向匹配
grep -v ifm30 /etc/passwd
# 忽略大小写
grep -i ifm30 /etc/passwd # 打印包含ifm30的行
grep -iv ifm30 /etc/passwd # 打印不包含ifm30的行
# 统计匹配到的行数(不是次数,同一行中有两个ifm30的话也只是1行)
grep -ci ifm30 /etc/passwd # 打印包含ifm30的行数
grep -civ ifm30 /etc/passwd # 打印不包含ifm30的行数
# 在匹配结果的前边打印匹配的行号
grep -ni ifm30 /etc/passwd
grep -niv ifm30 /etc/passwd
# 只打印匹配出的字符,而不是整行
grep -o i.*30 /etc/passwd
# 全词匹配
grep --color -iw ifm30 /etc/passwd # 打印包含ifm30的行
grep -ivw ifm30 /etc/passwd # 打印不包含ifm30的行
# 递归搜索:从/etc及其子目录的所有文件中搜寻包含ifm30的文件。
grep -r ifm30 /etc/
grep -R ifm30 /etc/
# 递归搜索并禁止打印所在文件名
grep -Rh ifm30 /etc/
grep -rh ifm30 /etc/
# 递归搜索,只打印所在文件名
grep -RL ifm30 /etc/ # 没有匹配结果的文件名
grep -Rl ifm30 /etc/ # 有匹配结果的文件名

正则表达式

# 只打印匹配出的字符,而不是整行
grep -o i.*30 /etc/passwd
# 以ifm30开头的行
grep ^ifm30 /etc/passwd
# 以ifm30结尾的行
grep ifm30$ /etc/passwd
# 仅仅包含ifm30的行
grep ^ifm30$ /etc/passwd
# 空行
grep ^$ /etc/passwd
# 匹配包含“bXt”字符的行(X代表任意一个字符)。在这里:\< 匹配单词前面的空字符串;\> 匹配单词后面的空字符串
grep '\<b.t\>' 文件名
# 打印出只有两个字符的所有行
grep '^..$' 文件名
# 显示以一个点和一个数字开头的行
grep '^\.[0-9]' 文件名
# 以下命令可以匹配“192.168.1.254”,也可以匹配分隔符不是点的类似格式
grep '192.168.1.254' /etc/hosts
# 以下命令精确匹配“192.168.1.254”
grep '192\.168\.1\.254' /etc/hosts
# 匹配两个数字字符(即 foo11、foo12 等)
grep 'foo[0-9][0-9]' 文件名
# 匹配至少一个字母的
grep '[A-Za-z]' 文件名
# 显示含有 "w" 或 "n" 字符的所有行
grep [wn] 文件名

技巧

  • 匹配多个
# 在日志文件中查找warning、error和critical这几个单词
grep 'warning\|error\|critical' /var/log/messages
# 在日志文件中查找warning、error和critical这几个单词(仅匹配单词)
$ grep -w 'warning\|error\|critical' /var/log/messages
  • 所有的grep -E都可以用egrep来替换;所有的grep -F都可以用fgrep来替换
# 从file中搜索包含ifm30或包含ifm40的行,全词匹配
grep -Erw "ifm30|ifm40" /etc/ 
# 要匹配字符 “v" 出现两次
grep -E "v{2}" 文件名
# 下面的命令能匹配到 "col" 和 "cool"
grep -E 'co{1,2}l' 文件名
# 下面的命令将会匹配出至少有三个 'c' 字符的所有行
grep -E 'c{3,}' 文件名
# 下面的例子会匹配 91-1234567890(即二个数字-十个数字) 这种格式的手机号
grep "[[:digit:]]\{2\}[ -]\?[[:digit:]]\{10\}" 文件名
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值