linux正则表达式
‘壹’ linux正则表达式
sed 's/#.*$//g' 把#开头的行替换成空行
sed '/^$/d' 把空行删掉
s是替换
g是指替换掉所有符合条件的
d是删除
^行的开头
$行的结尾
.除 "\n" 之外的任何单个字符
*前面的子表达式零次或多次
‘贰’ Linux命令行大全:什么是正则表达式
前面我们已经接触过命令行提供的许多特性和工具,并且也遇到过一些相当神秘的shell特性及命令,比如shell扩展和引用、键盘快捷键和命令历史记录等,更不用提vi编辑器了。正则表达式也延续了这种传统,而且可以说是众多特性中最神秘的一个(该说法应该会持有争议)。当然,并不是说这些特性不值得大家花时间去学习。恰恰相反,熟练掌握这些用法会给人意想不到的效果,尽管它们的全部价值可能不会立即体现出来。
‘叁’ Linux中,正则表达式的作用是什么
正则表达式主要用来描述、匹配一系列符合某个句法规则的字符串。很多时候用在查询操作上。
‘肆’ Linux的正则表达式问题。
你好,没有学过LINUX的正则,不过正则表达式,一般都相近,可能会有一些小差别。我可以用javascript的正则式表达上面两个问题,希望对你有帮助:
1
‘伍’ linux find 正则表达式
1:
find 0?
0?代表的是要查找的路径, 意思是在0?这个路径下查找. bash的?匹配任意一个字符,这里0?匹配到了01和0s. 在01和0s下查找文件,返回了01 0s.
2:
find 0.
在0.下查找,bash里.就是字符'.' ,因为没有0.这个文件, 所以报上面的错误.
3.
find ./ -regex "0."
在当前目录查找匹配正则0.的文件, -regex的正则"0." 使用的是emacs的正则, 匹配0后面跟一个字符. 错误是在于-regex的正则表达式必须匹配整个路径, 文件名前的路径"./"也需要匹配. 可以这样写
find ./ -regex "./0."
‘陆’ linux中 正则表达式和通配符的区别
通配符
它是由shell解析,并且一般用于匹配文件名,实际上就是shell解释器去解析的特殊符号,linux系统通配符有几下几种:
*:匹配任意多个字符
?:匹配任意一个字符
[...]:匹配中括号内出现的任意一个字符
[!...]:不匹配中括号内出现的任意一个字符
一般出现在要shell命令或脚本中,匹配特定的文件名
正则表达式
它是一个字符匹配标准,一些命令工具按此标准实现字符匹配,根据命令支持的匹配功能可分为基础正则表达式和扩展正则表达式,常用于支持正则表达式的工具,如sed,grep,awk...
有如下一些常用的匹配元字符:
字符匹配
.:匹配任意单个字符
*:匹配其前面一个字符出现任意次
?:匹配其前面的字符1次或0次
+:匹配其前面一个字符出现至少一次(在扩展正则表达式中)
位置匹配
^:锚定行首
$:锚定行尾
\<或\b:锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b:锚定词尾,其前面的任意字符必须作为单词尾部出现
\B:非单词的开头或结尾
^$:空白行
分组() :
(ab)* : 匹配ab这个分组出现任意次
\1:引用第一个左括号以及与之对应的右括号所包括的所有内容,同理还有\2,\3
特殊子字符类:
[:alnum:] :任何字母和数字
[:alpha:] :任何字母
[:cntrl:] :控制字符. 在ASCII表中对应八进制000 到 037, 和177 ('DEL').
[:digit:] :任何数字
[:graph:] :匹配打印字符,相当于'[:alnum:]' +'[:punct:]'.
[:lower:] :小写字母
[:print:] :可打印字符,相当于 '[:alnum:]', '[:punct:]', 和space.
[:punct:] 标点符号,'! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ' { | } ~'
[:space:] 空白字符,tab, newline, vertical tab, form feed, carriage return, and space.
[:upper:] 大写字母
[:xdigit:] 任何16进制的数字,相当于[0-9a-fA-F]
所以:^[[:space:]]*$ :匹配没有任何内容的行
需要注意:[]中的特殊字符如.已经失去了其特殊含义,和方括号中的普通字符[abc]一样。
‘柒’ linux 正则表达式怎么匹配
php">一.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).POSIXBRE与ERE中都有的meta字符:
:通常用于打开或关闭后续字符的特殊含义,如(...)与{...}
.:匹配任何单个字符(除NUL)
*:匹配其前的任何数目或没有的单个字符,例:.表示任一字符,则.*匹配任一字符的任意长度
^:匹配紧接着的正则表达式,BRE中仅在正则表达式的开头有特殊的含义,ERE中在任何位置都有特殊含义
$:匹配前面的正则表达式,在字符串或者行结尾处。BRE中仅在正则表达式的结尾处有特殊的含义,ERE中在任何位置都有特殊含义
[]:匹配方括号内的任一字符,其中可用连字符(-)指的连续字符的范围;^符号苦出现在方括号的第一个位置,则表示匹配不在列表中的任一字符,
(2).POSIXBRE中才有的字符:
{n,m}:区间表达式,匹配在它前面的单个字符重现的次数区别。{n}指重现n次;{n,m}指重现n至m次;
():保留空间,可以将最多9个独立的子模式存储在单个模式中。如(ab).*1:
指匹配ab组合的两次重现,中间可存在任意数目的字符。
:重复在(与)方括号内第n个子模式至此点的模式。
(3).POSIXERE中才有的字符:
{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..comhttp://www..comhttps://www..comhttp://wwwcom.com
1.url匹配
匹配以http或者https开头,并且其后为:并且含有.的串
BRE匹配:
grep'^https{0,1}.*..*'url.txt
ERE匹配:
grep-E'^https?.*..*'url.txt
匹配结果如下:
http://www..comhttps://www..com
2.Email匹配
示例文件内容为:
[email protected]@[email protected]@gmail.com
@@.com
匹配以字母数字或者下划线开头的多个字符,其后有一个@之后有多个字母数字或者下划线,其中有一个.号
grep'^[[:alpha:][:digit:]_]*@[[:alpha:][:digit:]]*..*'email.txt
匹配结果:
[email protected]@[email protected]
先到这里,后续再接着写。
‘捌’ linux里面的规则表达式、正则表达式、扩展表达式的定义
规则表达式=正则表达式
,都是
regular
expression
他的定义是
"是用某种模式去匹配一类字符串的一个公式"
扩展表达式我想你说的应该是
扩展正则表达式
他是正则表达式规范的补充
这个就没什么定义了
也就是添加了一些范围匹配和通配匹配
比如
.
[a-z]
等
这些都是扩展正则表达式的范围
另外说一点
grep命令支持的正则表达式是标准正则表达式
,而
egrep
(grep
-E)
支持扩展正则表达式匹配
事实上
目前大部分使用的正则表达式都是扩展正则表达式
‘玖’ linux 正则表达式中 ^[^d] 怎么理解
最前的
^
表示开头.就是之前再没有其它的.
[
]之间的^
表示非,就是[^\d]就是非数字,如果是[^d]就只是非d这个字母.
‘拾’ Linux命令详解之正则表达式
特殊字符
^
行首
$
行尾
.
任意一个字符
[]
内含字符范围,加^表示反向字符范围,在该范围内任何一个字符都可以匹配
(若要恢复普通用法,可在其前加转义字符/)
[:alnum:]
字母与数字字符
[:alpha:]
字母
[:ascii:]
ascii字符
[:blank:]
空格或制表符
[:cntrl:]
ascii控制字符
[:digit:]
数字
[:graph:]
非控制、非空格字符
[:lower:]
小写字母
[:print:]
可打印字符
[:punct:]
标点符号字符
[:space:]
空白字符,包括垂直制表符
[:upper:]
大写字母
[:xdigit:]
十六进制数字
其他字符
?
至多匹配一次
*
必须匹配0次或多次
+
必须匹配1次或多次
{n}
必须匹配n次
{n,}
必须匹配n次或n次以上
{n,m}
必须匹配在n到m次之间,包括n和m
示例
查找当前目录下所有以一位数字命名且以.txt结尾的文件,并进行显示
find
.-name
[[:digit:]]/.txt
-ok
ls
-l
{}
/;
查找所有以.txt结尾的文件并显示
find
.
-name[[:alnum:]]*/.txt
-ok
ls
-l
{}
/;