Linux正则表达式
在说linux正规表达式之前,还介绍下linux中查找文本文件常用的三个命令:
1.grep : 最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本。
2.egrep : 扩展式grep,其使用扩展式正规表达式(ERE)来匹配文本。
3.fgrep : 快速grep,这个版本匹配固定字符串而非正则表达式。并且是唯一可以并行匹配多个字符串的版本。
如下简单的介绍grep命令:
语法格式:
grep [options ...] pattern-spec [files ...]
用途:
匹配一个或多个模式的文本行。
options:
-E : 使用扩展正则表达式进行匹配, grep -E 或取代 egrep 命令。
-F : 使用固定字符串进行匹配, grep -F 或取代传统的fgrep命令。
-e : 通常第一个非选项的参数认为是要匹配的模式,也可以同时提供多个模式,只要将其放入单引号,并用换行字符分隔他们。
模式以减号开头时,为防止混淆其为选项,-e选项说明其后的参数为模式,即使他以减号开头。
-f : 从pat-file文件读取模式作为匹配。
-i : 模式匹配时忽略大小写差异。
-l : 列出匹配模式的文件名称,而不是打印匹配的行。
-q : 静默的,如果匹配成功,不将匹配的行输出到标准输出;否则即是不成功。
-s : 不显示错误信息,通常与-q并用。
-v : 显示不匹配模式的行。
说明:可以同时查找多个文件中的内容,当指定多个文件时,每个显示出的文件行前会有文件名加一个冒号标识其来自哪个文件。
可以使用多个-e 或 -f 选项,建立要查找的模式列表。
二.正则表达式简要介绍
1.正则表达式的组成
(1).一般字符:没有特殊意义的字符
(2).特殊字符(meta字符):元字符,有在正则表达式中有特殊意义
2.如下讲下正则表达式中的常见meta字符
(1).POSIX BRE与ERE中都有的meta字符:
\ : 通常用于打开或关闭后续字符的特殊含义,如\(...\)与\{...\}
. : 匹配任何单个字符(除NUL)
* : 匹配其前的任何数目或没有的单个字符,例: . 表示任一字符, 则 .* 匹配任一字符的任意长度
^ : 匹配紧接着的正则表达式,BRE中仅在正则表达式的开头有特殊的含义,ERE中在任何位置都有特殊含义
$ : 匹配前面的正则表达式,在字符串或者行结尾处。BRE中仅在正则表达式的结尾处有特殊的含义,ERE中在任何位置都有特殊含义
[] : 匹配方括号内的任一字符,其中可用连字符(-)指的连续字符的范围;^符号苦出现在方括号的第一个位置,则表示匹配不在列表中的任一字符,
(2).POSIX BRE中才有的字符:
\{n,m\} : 区间表达式,匹配在它前面的单个字符重现的次数区别。\{n\}指重现n次;\{n,m\}指重现n至m次;
\( \) : 保留空间,可以将最多9个独立的子模式存储在单个模式中。如\(ab\).*\1 : 指匹配ab组合的两次重现,中间可存在任意数目的字符。
\n : 重复在\(与\)方括号内第n个子模式至此点的模式。
(3).POSIX ERE中才有的字符:
{n,m} : 与BRE的\{n,m\}功能相同
+ : 匹配前面正则表达式的一个或多个扩展
? : 匹配前面正则表达式的零个或一个扩展
| : 匹配|符号前或后的正则表达式
( ) : 匹配方括号括起来的正则表达式群
(4). 方括号([])表达式
4.1.字符集 [: :]
标识字符集,有如下几种:
[::alnum] : 数字字符[:digit:] : 数字字符[:punct:] : 标点符号字符
[:alpha:] : 字母字符[:graph:] : 非空格字符[:space:] : 空格字符
[:blank:] : 空格与定位字符[:lower:] : 小写字母字符[:upper:] : 大写字母字符
[:cntrl:] : 控制字符[:print:] : 可显示的字符[:xdigit:] : 16进制数字
4.2.排序符号
指将多个字符视为一个符号,如[.ch.]即将ch视为一个符号
4.3.等价字符
认为多个字符相等,如[=e=]在法文的locale里,可匹配于多种与e相似的字符,此处不再列出。
说明:这三种构造除其自身的方括号之外,还必须使用额外的方括号括起来。
例 : [[:alpha:]!] : 匹配任一英文字母或感叹号。
[[.ch.] : 匹配ch排序元素,而不匹配单独的字母c或h.
3.简单正规表达式匹配案例
china : 匹配此行中任意位置有china字符的行
^china : 匹配此以china开关的行
china$ : 匹配以china结尾的行
^china$ : 匹配仅有china五个字符的行
[Cc]hina : 匹配含有China或china的行
Ch.na : 匹配包含Ch两字母并且其后紧跟一个任意字符之后又有na两个字符的行
Ch.*na : 匹配一行中含Ch字符,并且其后跟0个或者多个字符,再继续跟na两字符
二.实例
如下通过常用实例来学习BRE和ERE匹配,源文件url.txt内容如下:
www.baidu.com
http://www.baidu.com
https://www.baidu.com
http://wwwbaiducom
baidu.com
baidu
1.url匹配
匹配以http或者https开头,并且其后为:并且含有.的串
BRE匹配:
grep '^https\{0,1\}.*\..*' url.txt
ERE匹配:
grep -E '^https?.*\..*' url.txt
匹配结果如下:
http://www.baidu.com
https://www.baidu.com
2.Email匹配
示例文件内容为:
hfutwyy@qq.com
aaaa@
aaa@.com
aaa@gmail.com
@@baidu.com
匹配以字母数字或者下划线开头的多个字符,其后有一个@之后有多个字母数字或者下划线,其中有一个.号
grep '^[[:alpha:][:digit:]_]*@[[:alpha:][:digit:]]*\..*' email.txt
匹配结果:
hfutwyy@qq.com
aaa@.com
aaa@gmail.com
转自 嘉为教育-rhce认证_rhce培训_linux培训_linux认证_linux考证
Linux正则表达式 只包含四个字母,但不包含f 如何写?
您好,望采纳:grep -E -w -i [a-eg-z]{4} your_file_name
Linux下Grep命令的详细使用方法?
在linux中grep命令是非常有用的,它和管道(|)配合使用,非常强大,用于搜索文本文件.如果想要在几个文本文件中查找一字符串,可以使用‘grep’命令。‘grep’在文本中搜索指定的字符串。 假设您正在‘\/usr\/src\/linux\/Documentation’目录下搜索带字符串‘magic’的文件: $ grep magic \/usr\/src\/linux\/...
linux中grep命令的使用
1、linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。2、格式 grep[options]3、主要参数 [options]主要参数:-c:只输出匹配行的计数。-I:不区分大小写(只...
linux 文本处理工具之一grep命令详解
以上代码直接粘贴复制在linux上可直接运行,代码解释运行效果,如下 3、 正则表达式(man regex)是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串,通常被用来检索或替换那些符合某个 模式的文本内容。正则表达式分为:基本正则表达式和扩展正则表达式。 元字符就是指...
linux grep命令怎么用
Linux grep命令用于查找文件里符合条件的字符串或正则表达式。grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。语法:gre...
linux正则表达式 ;s\/^[ \\t]*\/\/是什么意思?
s\/ro.swversion=\/\/ 是将ro.swversion删掉 s\/^[ \\t]* 是将这一行起始的空白字符删掉 s\/[ \\t].*\/\/' 是将空白及以后的内容删掉 比如:字符串 ' hello ro.swversion ok'做上面的处理后,结果就是hello
linux正则表达式 ^[[:space:]]*$ 应该怎么理解,麻烦详细说明一下_百度...
[[:space:]]表示空白字符 ^[[:space:]]表示行首为空白字符 ^[[:space:]]*表示0个或多个空白字符 ^[[:space:]]*$表示行首为空白字符且以0个或多个空白字符结尾,即表示空白行或包含空白字符的行 ^$仅表示空白行
linux正则表达式 ;s\/^[ \\t]*\/\/是什么意思?
s\/ro.swversion=\/\/ 是将ro.swversion删掉 s\/^[ \\t]* 是将这一行起始的空白字符删掉 s\/[ \\t].*\/\/' 是将空白及以后的内容删掉 比如:字符串 ' hello ro.swversion ok'做上面的处理后,结果就是hello 免费提供最新Linux技术教程书籍,入门自学书籍《linux就该这么学》,为开源技术爱好...
linux 正则表达式中 ^[^d] 怎么理解?
最前的 ^ 表示开头.就是之前再没有其它的.[ ]之间的^ 表示非,就是[^\\d]就是非数字,如果是[^d]就只是非d这个字母.
Linux必须学会的60个命令:文件处理1
^:匹配正则表达式的开始行。 $:匹配正则表达式的结束行。 <:从匹配正则表达式的行开始。 >:到匹配正则表达式的行结束。 [ ]:单个字符,如[A]即A符合要求。 [ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求。 。:所有的单个字符。 *:有字符,长度可以为0。 正则表达式是Linux\/Unix系统中非常重要的概念...
却昏倍迪: 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念.正则表通常被用来检索、替换那些符合某个模式(规则)的文本.
维扬区19563877674: linux正则表达式 - ?
却昏倍迪: sed 's/#.*$//g' 把#开头的行替换成空行 sed '/^$/d' 把空行删掉 s是替换 g是指替换掉所有符合条件的 d是删除 ^行的开头$行的结尾.除 "\n" 之外的任何单个字符*前面的子表达式零次或多次
维扬区19563877674: Linux中,正则表达式的作用是什么 - ?
却昏倍迪: 正则表达式主要用来描述、匹配一系列符合某个句法规则的字符串.很多时候用在查询操作上.
维扬区19563877674: Linux命令行大全:什么是正则表达式 - ?
却昏倍迪: 前面我们已经接触过命令行提供的许多特性和工具,并且也遇到过一些相当神秘的shell特性及命令,比如shell扩展和引用、键盘快捷键和命令历史记录等,更不用提vi编辑器了.正则表达式也延续了这种传统,而且可以说是众多特性中最神秘的一个(该说法应该会持有争议).当然,并不是说这些特性不值得大家花时间去学习.恰恰相反,熟练掌握这些用法会给人意想不到的效果,尽管它们的全部价值可能不会立即体现出来.
维扬区19563877674: linux正则表达式 ;s/^[ \t]*//是什么意思? - ?
却昏倍迪: s/ro.swversion=// 是将ro.swversion删掉 s/^[ \t]* 是将这一行起始的空白字符删掉 s/[ \t].*//' 是将空白及以后的内容删掉 比如:字符串 ' hello ro.swversion ok' 做上面的处理后,结果就是hello
维扬区19563877674: linux中正则表达式file*.c dir ??char[a - f].o的含义 - ?
却昏倍迪: 这个应该不是正则表达式而是linux下面的文件通配符* 匹配文件名中的任何字符串,包括空字符串. ? 匹配文件名中的任何单个字符. [...] 匹配[ ]中所包含的任何字符.一般用于cp mv ls 类似的命令,通配文件 像 file*.c 就表示 fileafasf.c 这样类似的文件名,像上面的全部放到一起具体还不知道是什么? 一个很长的包含空格的文件名?
维扬区19563877674: 怎么学好Linux中的正则表达式?本人正在摸索中,不是很顺利,望大哥们提些建议??
却昏倍迪: 朋友 你好 正则表达式广泛出现在UNIX/Linux相关的各种领域和多种编程语言里.从常见的shell命令到大名鼎鼎的Perl语言再到当前非常流行的PHP,它都扮演着一个重要的角色.甚至windows的命令行控制台也支持正则表达式.如果你是一个...
维扬区19563877674: linux里面的规则表达式、正则表达式、扩展表达式的定义 - ?
却昏倍迪: 规则表达式=正则表达式 ,都是 regular expression 他的定义是 "是用某种模式去匹配一类字符串的一个公式" 扩展表达式我想你说的应该是 扩展正则表达式 他是正则表达式规范的补充 这个就没什么定义了 也就是添加了一些范围匹配和通配匹配 比如 . [a-z] 等 这些都是扩展正则表达式的范围 另外说一点 grep命令支持的正则表达式是标准正则表达式 ,而 egrep (grep -E) 支持扩展正则表达式匹配 事实上 目前大部分使用的正则表达式都是扩展正则表达式
维扬区19563877674: linux中 正则表达式和通配符的区别 - ?
却昏倍迪: 通配符 它是由shell解析,并且一般用于匹配文件名,实际上就是shell解释器去解析的特殊符号,linux系统通配符有几下几种:*:匹配任意多个字符?:匹配任意一个字符 [...]:匹配中括号内出现的任意一个字符 [!...]:不匹配中括号内出现的任...
维扬区19563877674: 请问下面这个linux正则表达式是什么意思? NAME - REGEX="^[a - z][ - a - z0 - 9 - ]*\$" - ?
却昏倍迪: ^[a-z]是指行首第一个字符是小写字母 [-a-z0-9_]第一个"-"是连接符,意思后面的字符跟前面的字符是紧挨着的;a-z0-9就好理解了,是任意小写字符或数字中的一个;_是指0个或1个前面的字符*号代表重得多个前面的字符串,即多个[a-z0-9] \转义符号$行尾,代表结束