首页运维零件 › 正则表达式只不过是每个输入行匹配的模式,Linux 附带有vns威尼斯城官网登入: GNU grep 命令工具

正则表达式只不过是每个输入行匹配的模式,Linux 附带有vns威尼斯城官网登入: GNU grep 命令工具

在 Linux 、类 Unix 系统中自身该怎么利用 Grep 命令的正则表明式呢?

何以在 Linux 系统和类 Unix 的操作系统中动用带正则表达式的 grep 命令呢?

grep 命令类别:怎样在 Linux/UNIX 中应用 grep 命令

自己该怎么在 Linux、Apple OS X 及别的类 UNIX 系统中央银行使 grep
命令,你能给自身显得一些简练的事例吗?

grep
命令用来查究文本,或从给定的文书中搜寻行内包蕴了给定字符串或单词的文本。常常来讲,grep
展现相称到的行。使用 grep
来搜寻满含一个或八个正则表达式相称到的文本行,然后只展现相称到的行。grep
被当做在 Linux/ Unix 系统中最可行的授命之一。

vns威尼斯城官网登入 1

 

Linux 附带有 GNU grep 命令工具,它协理扩充正则表明式(extended regular
expressions),况且 GNU grep 在具备的 Linux 系统中都以暗中同意有的。Grep
命令被用来找寻一定期存款款和储蓄在你服务器或职业站上的其他新闻。

Linux 系统自带了支撑开展正则表达式的 GNU 版本 grep 工具。全数的 Linux
系统中暗中认可安装的都以 GNU 版 grep 。grep
命令被用来寻觅一台服务器或专门的事业站上其余岗位的公文音讯。

您驾驭吧

grep 那一个名字,来源于三个 Unix/Linux 中的古老的行编辑器
ed 中进行相符操作的下令:

g/re/p

 

vns威尼斯城官网登入 2

vns威尼斯城官网登入 3

grep 命令的语法

语法如下所示:

grep 'word' 文件名
grep 'word' 文件1 文件2 文件3
grep '字符串1 字符串2'  文件名
cat 某个文件 | grep '某个东西'
command | grep '某个东西'
command 选项1 | grep '数据'
grep --color '数据' 文件名

 

正则表明式

正则表达式就是用以相配每行输入的一种情势,情势是指一串字符体系。上面是榜样:

^w1
w1|w2
[^ ]

一、急迅了解正则表明式

怎么样使用 grep 来查找二个文本

搜索 /etc/passwd 文件下的 boo 客商,输入:

$ grep boo /etc/passwd

出口内容:

foo:x:1000:1000:foo,,,:/home/foo:/bin/ksh

能够使用 grep 去强制忽视大小写。比如,使用 -i 选项能够宽容 boo, Boo, BOO
和别的组成:

$ grep -i "boo" /etc/passwd

 

grep 正则表明式示例

在 /etc/passswd 目录中寻找 ‘vivek’

grep vivek /etc/passwd

输出例子:

vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
gitevivek:x:1002:1002::/home/gitevivek:/bin/sh

查找大小写任性的 vivek(即不区分轻重缓急写的研究卡塔尔

grep -i -w vivek /etc/passwd

寻觅大小写任性的 vivek 或 raj

grep -E -i -w 'vivek|raj' /etc/passwd

地点最终的事例突显的,正是二个恢宏的正则表达式的格局。

1、怎么样合作你要索求的剧情?

递归使用 grep

您可以递归地利用 grep
实行查找。举例,在文件目录上边寻觅全数包蕴字符串“192.168.1.5”的公文

$ grep -r "192.168.1.5" /etc/

或者是:

$ grep -R "192.168.1.5" /etc/

事必躬亲输出:

/etc/ppp/options:# ms-wins 192.168.1.50
/etc/ppp/options:# ms-wins 192.168.1.51
/etc/NetworkManager/system-connections/Wired connection 1:addresses1=192.168.1.5;24;192.168.1.2;

您会看出搜索到 192.168.1.5
的结果每一行都前缀以找到特别的公文名(举个例子:/etc/ppp/options)。输出之中包涵的文件名可以加
-h 选项来禁绝出口:

$ grep -h -R "192.168.1.5" /etc/

或者

$ grep -hR "192.168.1.5" /etc/

身教重于言教输出:

# ms-wins 192.168.1.50
# ms-wins 192.168.1.51
addresses1=192.168.1.5;24;192.168.1.2;

 

锚点

你能够分级选拔 ^ 和 $
符号来正则相配输入行的最早或最终。上边包车型客车事例搜索呈现唯有以 vivek
最早的输入行:

grep ^vivek /etc/passwd

出口例子:

vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh

您能够只是只寻找出以单词 vivek 初叶的行,即不出示 vivekgit、vivekg
等(LCTT 译注:即该单词前边是空格、符号等爱尔兰语的单词分隔符。)

grep -w ^vivek /etc/passwd

寻觅以单词 word 结尾的行:

grep 'foo$' 文件名

相称仅仅只含有 foo 的行:

grep '^foo$' 文件名

正如所示的事例能够搜寻空行:

grep '^$' 文件名

正则表明式只可是是各样输入行相配的格局。形式是三个字符类别。上边都以范例:

运用 grep 去找出文本

当你寻觅 boo 时,grep 命令将会相称 fooboo,boo123, barfoo35
和别的兼具包涵 boo 的字符串,你能够运用 -w
选项去强迫只输出那个单纯包涵这一个全数单词的行(LCTT译注:即该字符串两边是葡萄牙共和国语单词分隔符,如空格,标点符号,和后边等,因而对汉语这种未有断字符号的语言并不适用。)。

$ grep -w "boo" file

 

字符类

匹配 Vivek 或 vivek:

grep '[vV]ivek' 文件名

或者

grep '[vV][iI][Vv][Ee][kK]' 文件名

也得以协作数字 (即相配 vivek1 或 Vivek2 等等State of Qatar:

grep -w '[vV]ivek[0-9]' 文件名

能够包容四个数字字符(即 foo11、foo12 等卡塔尔国:

grep 'foo[0-9][0-9]' 文件名

不只局限于数字,也能相称最少四个字母的:

grep '[A-Za-z]' 文件名

显示含有 “w” 或 “n” 字符的全部行:

grep [wn] 文件名

坐落括号内的表达式,即包在 “[:" 和 ":]”
之间的字符类的名字,它象征的是归于此类的装有字符列表。规范的字符类名称如下:

  • [:alnum:] – 字母数字字符
  • [:alpha:] – 字母字符
  • [:blank:] – 空字符: 空格键符 和 制表符
  • [:digit:] – 数字: ’0 1 2 3 4 5 6 7 8 9′
  • [:lower:] – 小写字母: ‘a b c d e f g h i j k l m n o p q r s t u v
    w x y z’
  • [:space:] – 空格字符:
    制表符、换行符、垂直制表符、换页符、回车符和空格键符
  • [:upper:] – 大写字母: ‘A B C D E F G H I J K L M N O P Q Enclave S T U V
    W X Y Z’

在这么些例子所示的是优异全体大写字母:

grep '[:upper:]' 文件名

例如:“^w1”、“w1|w2”、“[^ ]”。

行使 grep 命令去搜索五个不等的单词

使用 egrep 命令如下:

$ egrep -w 'word1|word2' /path/to/file

(LCTT 译注:这里运用到了正则表明式,由此利用的是 egrep 命令,即扩张的
grep 命令。)

 

通配符

你能够使用 “.” 来相配单个字符。例子中优异以 “b” 起头以 “t”
结尾的3个字符的单词:

grep '/<b.t/>' 文件名

在这儿,

  • /< 相称单词前边的空字符串
  • /> 相配单词前边的空字符串

打字与印刷出独有四个字符的全部行:

grep '^..$' 文件名

显示以二个点和三个数字早先的行:

grep '^/.[0-9]' 文件名

在 ‘/etc/passswd’ 中检索 ‘vivek’ 。
grep vivek /etc/passwd

总计文本相配到的行数

grep 命令能够透过加 -c 参数突显每种文件中卓绝到的次数:

$ grep -c 'word' /path/to/file

传递 -n 选项能够输出的行前加盟相配到的行的行号:

$ grep -n 'root' /etc/passwd

示范输出:

1:root:x:0:0:root:/root:/bin/bash
1042:rootdoor:x:0:0:rootdoor:/home/rootdoor:/bin/csh
3319:initrootapp:x:0:0:initrootapp:/home/initroot:/bin/ksh

 

点字符转义

下边要合营到 IP 地址为 192.168.1.254 的正则式是不正确的:(LCTT
译注:能够相配到该 IP 地址,可是也是有一点都不小可能特别到间距符号不是点的切近格式)

grep '192.168.1.254' /etc/hosts

三个点字符都需求转义:

grep '192/.168/.1/.254' /etc/hosts

下边包车型大巴例证只可以合作出 IP 地址:(LCTT 译注:实际上由于 IP
地址中数字的取值范围,该正则表明式并不纯粹)

egrep '[[:digit:]]{1,3}/.[[:digit:]]{1,3}/.[[:digit:]]{1,3}/.[[:digit:]]{1,3}' 文件名

输出结果案例:
vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
gitevivek:x:1002:1002::/home/gitevivek:/bin/sh

反转相配(不协作)

能够利用 -v
选项来输出不含有相称项的剧情,输出内容无非包罗那三个不含给定单词的行,例如输出全数不包罗bar 单词的行:

$ grep -v bar /path/to/file

 

什么样寻觅以“-” 符号开头的协作情势?

要利用 -e 选项来搜寻相称 ‘–test–’ 字符串,假如不选拔 -e 选项,grep
命令会盘算把 ‘–test–’ 充作自个儿的选项参数来解析:

grep -e '--test--' 文件名

在其他情状下都找寻 ‘vivek’  (即不区分朗朗上口卡塔尔(قطر‎:
grep -i -w vivek /etc/passwd

UNIX/Linux 管道与 grep 命令

grep 平日与管道一同行使,在此个事例中,彰显硬盘设备的名字:

# dmesg | egrep '(s|h)d[a-z]'

显示 CPU 型号:

# cat /proc/cpuinfo | grep -i 'Model'

只是,以上命令也得以依据以下措施应用,不行使管道:

# grep -i 'Model' /proc/cpuinfo

以身作则输出:

model       : 30
model name  : Intel(R) Core(TM) i7 CPU       Q 820  @ 1.73GHz
model       : 30
model name  : Intel(R) Core(TM) i7 CPU       Q 820  @ 1.73GHz

 

怎么使用 grep 的“或”相称?

应用如下的语法:

grep -E 'word1|word2' 文件名
或
egrep 'word1|word2' 文件名

或者是

grep 'word1/|word2' 文件名

不区分朗朗上口写地找寻 ‘vivek’ 和 ‘raj’ :
grep -E -i -w 'vivek|raj' /etc/passwd

什么样仅仅展现相配到剧情的文件名字?

利用 -l 选项去体现这一个文件内容中蕴藏 main(卡塔尔(قطر‎ 的文件名:

$ grep -l 'main' *.c

最后,你能够免强 grep 以彩色输出:

$ grep --color vivek /etc/passwd

示范输出:

vns威尼斯城官网登入 4

Grep command in action

grep使用简明及正则表明式

正则表明式的用法

正则表明式之零宽断言

Linux命令-文件文本操作grep 

grep正则表明式

Linux中正则表达式与公事格式化管理命令(awk/grep/sed卡塔尔


via:

作者:Vivek Gite 译者:zky001 校对:wxy

正文由 LCTT 原创编写翻译,Linux中炎黄子孙民共和国 荣誉推出

本文恒久更新链接地址:

命令体系:怎么样在 Linux/UNIX 中选取 grep 命令
笔者该怎样在 Linux、Apple OS X 及别的类 UNIX 系统中使用 grep
命令,你能给自个儿显得一些简易的例...

怎么使用 grep 的“和”相称?

选用上边包车型大巴语法来显示既包罗 ‘word1′ 又富含 ‘word2′ 的享有行

grep 'word1' 文件名 | grep 'word2'

在终极一个例子中,使用了扩大正则表达式的形式。

哪些使用种类车检查测?

应用如下的语法,您能够检查测试贰个字符在系列中再次现身次数:

{N}
{N,}
{min,max}

要相称字符 “v” 现身四回:

egrep "v{2}" 文件名

下边包车型客车指令能相称到 “col” 和 “cool” :

egrep 'co{1,2}l' 文件名

下边包车型客车吩咐将会相称出至罕见八个 ‘c’ 字符的具有行。

egrep 'c{3,}' 文件名

下边包车型客车事例会相称 91-1234567890(即一个数字-10个数字) 这种格式的手机号。

grep "[[:digit:]]/{2/}[ -]/?[[:digit:]]/{10/}" 文件名

固化检索内容的职位:
 你能够选取 ^ 和 $
符号免强八个正则表明式分别相配一行的发端或结束的职位。上面包车型大巴亲自过问展现以
‘vivek’ 早先的文书。
grep ^vivek /etc/passwd

怎么着使 grep 命令高亮展现?

动用如下的语法:

grep --color 正则表达式 文件名

输出结果示例:
vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh

什么仅仅只展现相称出的字符,并非匹配出的行?

动用如下语法:

grep -o 正则表达式 文件名

您能够只体现以 vivek 早先的文本行。举例说正是不突显 vivekgite , vivekg
那样单词起头的。
grep -w ^vivek /etc/passwd

正则表明式限制符

限定符 描述
. 匹配任意的一个字符。
? 匹配前面的子表达式,最多一次。
* 匹配前面的子表达式零次或多次。
+ 匹配前面的子表达式一次或多次。
{N} 匹配前面的子表达式 N 次。
{N,} 匹配前面的子表达式 N 次到多次。
{N,M} 匹配前面的子表达式 N 到 M 次,至少 N 次至多 M 次。
- 只要不是在序列开始、结尾或者序列的结束点上,表示序列范围。
^ 匹配一行开始的空字符串;也表示字符不在要匹配的列表中。
$ 匹配一行末尾的空字符串。
/b 匹配一个单词前后的空字符串。
/B 匹配一个单词中间的空字符串。
/< 匹配单词前面的空字符串。
/> 匹配单词后面的空字符串。

追寻以 ‘foo’ 结尾的文本格式:
grep 'foo$' FILENAME

grep 和 egrep

egrep 等同于 grep -E
。它会以恢宏的正则表明式的情势来批注形式。上面来自 grep 的帮衬页:

主干的正则表明式元字符 ?、+、 {、 |、 ( 和 卡塔尔已经错过了它们原本的含义,要选择的话用反斜线的版本 /?、/+、/{、/|、/(
和 /卡塔尔国 来替代。 古板的 egrep 并不帮衬 { 元字符,一些 egrep 的落到实处是以
/{ 代替的,所以三个可移植的剧本应该防止在 grep -E 使用 {
符号,要相配字面包车型大巴 { 应该利用 [}]。

GNU grep -E 试图帮助古板的用法,假设 {
出在在无效的区间标准字符串那前,它就能够假定 { 不是特殊字符。

诸如,grep -E ‘{1′ 命令寻找包括 {1
五个字符的串,而不会报出正则表达式语法错误。

POSIX.2 标准允许这种操作的扩张,但在可移植脚本文件里应该制止那样使用。

参考:

  • grep 和 regex 协帮手册页(7State of Qatar
  • grep 的 info 页

你还能用上边这样的方法找出空白行:
grep '^$' FILENAME

2、怎么着协作具体字符?

匹配 ‘Vivek’ 或 ‘vivek’ :
grep '[vV]ivek' FILENAME

转载本站文章请注明出处:vns威尼斯城官网登入 http://www.tiec-ccpittj.com/?p=5215

上一篇:

下一篇:

相关文章