Linux-grep正则匹配

Hanze | May 13, 2022 min read
grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]]
	[-e pattern] [-f file] [--binary-files=value] [--color=when]
	[--context[=num]] [--directories=action] [--label] [--line-buffered]
	[--null] [pattern] [file ...]

grep 扩展

grep -E: 增加了些普通的正则功能,利用此命令可以使用扩展的正则表达式对文本进行搜索,并把符合用户需求的字符串打印出来。 +   匹配一个或多个先前的字符。如:’[a-z]+able’,匹配一个或多个小写字母后跟able的串,如loveable, enable, disable等。 ? 匹配零个或一个先前的字符。如:‘gr?p’匹配gr后跟一个或没有字符,然后是p的行。 a|b|c     匹配a或b或c。如:grep|sed匹配grep或sed a|b|c  匹配a或b或c。如:grep|sed匹配grep或sed () 分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。 x{m},x{m,},x{m,n}  作用同x{m},x{m,},x{m,n} grep -P -P, –perl-regexp Interpret PATTERN as a Perl regular expression.  This is highly experimental and grep -P may warn of  nimplemented features. 这意思是,-P 可以让grep使用perl的正则表达式语法,因为perl的正则更加多元化,能实现更加复杂的场景。 最典型的用法是,匹配指定字符串之间的字符。 比如,我们想在一句话(Hello,my name is aming.)中匹配中间的一段字符串(my name is) 可以这样写正则表达式。 echo "Hello, my name is aming."|grep -P '(?<=Hello, ).*(?= aming.)' 如果只需要匹配到的部分,还可以加上-o选项 echo "Hello, my name is aming."|grep -Po '(?<=Hello, ).*(?= aming.)' 根据这个思路,我们可以去匹配IP地址 ifconfig eth0 |grep -Po '(?<=addr:).*(?= Bcast)'

  • grep: -v: 逆反模示, 只输出"不含" RE 字符串之句子.
    -r: 递归模式, 可同时处理所有层级子目录里的文件.
    -q: 静默模式, 不输出任何结果(stderr 除外. 常用以获取 return value, 符合为 true, 否则为 false .)
    -i: 忽略大小写.
    -w: 整词比对, 类似 <word> .
    -n: 同时输出行号.
    -c: 只输出符合比对的行数.
    -l: 只输出符合比对的文件名称.
    -o: 只输出符合 RE 的字符串. (gnu 新版独有, 不见得所有版本都支持.)
    -E: 切换为 egrep .
comments powered by Disqus