grep中的正则表达式

时间:2019-11-20 08:53:30  来源:igfitidea点击:

在grep中,如何使用正则表达式?
在Linux shell中,如何使用正则表达式搜索字符串?

GNU grep是所有Linux系统上的默认设置。 grep用于在文件中搜索字符串。其指出正则表达式模式匹配。

在grep中的正则表达式

正则表达式用于设置匹配的模式。
模式是一种字符序列。
例如:

^w1
w1|w2
[^ ]
foo
bar
[0-9]

分别表示:

  • 以w1开头
  • w1或者w2
  • 匹配非控股
  • 匹配单词foo
  • 匹配单词bar
  • 匹配数字0到9

三种正则表达式

grep可以理解三种不同类型的正则表达式语法,如下所示:

  • 基本(BRE)
  • 扩展(ERE)
  • perl(PCRE)

grep正则表达式示例

在/etc/passswd中搜索Hyman

grep 'Hyman' /etc/passwd

搜索Hyman单词(不区分大小写)

grep -i -w 'Hyman' /etc/passwd

搜索Hyman或者ma

grep -E -i -w 'Hyman|ma' /etc/passwd

使用扩展的正则表达式:

egrep -i '^(linux|unix)' filename

如何匹配点字符

在正则表达式中,字符点号有特殊含义,即匹配任何字符。

如果要匹配点号,那么需要进行转义。(在前面加上(反斜杠)),例如

grep 'read.txt' demo.txt
grep 'read\.txt' demo.txt

第一个命令匹配read后面跟着任意字符的字符串,比如readatxt ,readbtxt。
第二个命令匹配read.txt 字符串

锚点

可以使用^和$来强制正则表达式分别仅在行的开头或结尾进行匹配。

例如,仅匹配以Hyman开头的行:

grep ^Hyman /etc/passwd

仅匹配以单词Hyman开头的行, 所以Hymanage将不会被匹配,因为不是Hyman单词

grep -w ^Hyman /etc/passwd

匹配以foo结尾的行:

grep 'foo$' filename

匹配仅包含foo的行:

grep '^foo$' filename

在shell中搜索空白行:

grep '^$' filename