正则表达式(全)

目录

单括号,双括号,中括号,双中括号,大括号

单括号:

双小括号:

中括号:

双中括号:

大括号:

Echo的用法

正则表达式定义:

正则表达式组成

普通字符:

元字符

扩展元字符

使用grep匹配正则

示例:

总结:元字符

正则工具

Cut工具

Sort工具

Uniq工具

Tr工具

Sed工具:

单括号,双括号,中括号,双中括号,大括号

单括号

1.命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。

2.命令替换。等同于cmd,shell扫描一遍命令行,发现了( c m d ) 结 构 , 便 将 (cmd)结构,便将(cmd)结构,便将(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些shell不支持,如tcsh。

3.用于初始化数组。如:array=(a b c d)

双小括号:

1.整数扩展。这种扩展计算是整数型的计算,不支持浮点型。((exp))结构扩展并计算一个算术表达式的值,如果表达式的结果为0,那么返回的退出状态码为1,或者 是"假",而一个非零值的表达式所返回的退出状态码将为0,或者是"true"。若是逻辑判断,表达式exp为真则为1,假则为0。

2.只要括号中的运算符、表达式符合C语言运算规则,都可用在$((exp))中,甚至是三目运算符。作不同进位(如二进制、八进制、十六进制)运算时,输出结果全都自动转化成了十进制。如:echo $((16#5f)) 结果为95 (16进位转十进制)

3.单纯用 (( )) 也可重定义变量值,比如 a=5; ((a++)) 可将 $a 重定义为6

4.常用于算术运算比较,双括号中的变量可以不使用$符号前缀。括号内支持多个表达式用逗号分开。 只要括号中的表达式符合C语言运算规则,比如可以直接使用for((i=0;i<5;i++)),如果不使用双括号,则为for i inseq 0 4或者for i in {0..4}。再如可以直接使用if (($i<5)),则为if [ $i -lt 5 ]。

((expr  ))通常作为运算的

中括号

1.bash 的内部命令,[和test是等同的。如果我们不用绝对路径指明,通常我们用的都是bash自带的命令。if/test结构中的左中括号是调用test的命令标识,右中括号是关闭条件判断的。这个命令把它的参数作为比较表达式或者作为文件测试,并且根据比较的结果来返回一个退出状态码。if/test结构中并不是必须右中括号,但是新版的Bash中要求必须这样。

2.Test和[]中可用的比较运算符只有=和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。无论是字符串比较还是整数比较都不支持大于号小于号。如果实在想用,对于字符串比较可以使用转义形式,如果比较"ab"和"bc":[ ab \< bc ],结果为真,也就是返回状态为0。[ ]中的逻辑与和逻辑或使用-a 和-o 表示。且[]前后都有空格。

3.字符范围。用作正则表达式的一部分,描述一个匹配的字符范围。作为test用途的中括号内不能使用正则。

4.在一个array 结构的上下文中,中括号用来引用数组中每个元素的编号。

双中括号

1.[[是 bash 程序语言的关键字。并不是一个命令,[[ ]] 结构比[ ]结构更加通用。在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。

2.支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。[[ ]] 中匹配字符串或通配符,不需要引号。

3.使用[[ … ]]条件判断结构,而不是[ … ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]],如果不适用双括号,则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。

4.bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。

大括号

1.大括号拓展。(通配(globbing))将对大括号中的文件名做扩展。在大括号中,不允许有空白,除非这个空白被引用或转义。第一种:对大括号中的以逗号分割的文件列表进行拓展。如 touch {a,b}.txt 结果为a.txt b.txt。第二种:对大括号中以点点(…)分割的顺序文件列表起拓展作用,如:touch {a…d}.txt 结果为a.txt b.txt c.txt d.txt

2.代码块,又被称为内部组,这个结构事实上创建了一个匿名函数 。与小括号中的命令不同,大括号内的命令不会新开一个子shell运行,即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开,最后一个也必须有分号。{}的第一个命令和左括号之间必须要有一个空格。{}也可以用于多行注释,作为函数包起来只是不调用即可。

[ a /< b ]实际上比的是ascll码的值,其中a,b表示的并不是变量,如果需要比较变量则需要在前面增加$符号。

Echo的用法

Echo -n表示不换行输出

Echo -e表示输出转移字符,将转义后的内容输出到屏幕上

常用的转义字符如下:

\b:转义后相当于按退格键(backspace),但前提是"\b"后面存在字符;"\b"表示删除前一一个字符,"\b\b”表示删除前两个字符。

\c:不换行输出,在"\c"后面不存在字符的情况下,作用相当于echo -n;但是当"\c"后面仍然存在字符时,"\c"后面的字符将不会被输出。

\n:换行,被输出的字符从"\n"处开始另起一行。

\f换行,但是换行后的新行的开头位置连接着上一行的行尾;

\v '与\f相同;

\t转以后表示插入tab,即横向制表符;

\r光标移至行首,但不换行,相当于使用"\r"以后的字符覆盖"\r"之前同等长度的字符:但是当"\r"后面不存在任何字符时,"\r"前面的字符不会被覆盖

\\表示插入"\"本身;

正则表达式定义

正则表达式,又称正规表达式、常规表达式,使用字符串来描述、匹配一系列符合某个规则的字符串。

正则表达式组成

普通字符

大小写字母、数字、标点符号及一些其他符号

元字符:

在正则表达式中具有特殊意义的专用字符

元字符

\:转义字符,\!、\n等

^:匹配字符串开始的位置

例: ^a、^the、^#

$:匹配字符串结束的位置

例: word$

.:匹配除\n之外的任意的一个字符

例: go.d、g..d

*:匹配前面子表达式0次或者多次

例:goo*d、go.*d

[list]:匹配list列表中的一个字符

例: go[ola]d,[abc]、[a-z]、[a-z0-9]

[^list]:匹配任意不在list列表中的一个字符

例: [^a-z]、[^0-9]、[^A-Z0-9]

\{n,m\}:匹配前面的子表达式n到m次,有\{n\}、\{n,\}、\{n,m\}三种格式

例:go\{2\}d、go\{2,3\}d、go\{2,\}d

扩展元字符

       +:匹配前面子表达式1次以上

例: go+d,将匹配至少一个o

?:匹配前面子表达式0次或者1次

例: go?d,将匹配gd或god

():将括号中的字符串作为一个整体

例:(xyz)+,将匹配 xyz 整体1次以上,如xyzxyz

|:以或的方式匹配字条串

例1: good|food,将匹配good或者food

例2: g(oo|la)d,将匹配good或者glad

使用grep匹配正则

       Grep 【选项】 查找条件 目标文件

-w:表示精确匹配

-E :开启扩展(Extend)的正则表达式

-c : 计算找到'搜寻字符串'的次数

-i :忽略大小写的不同,所以大小写视为相同

-o :只显示被模式匹配到的宁符串

-v:反向选择,亦即显示出没有'搜寻字符串′内容的那一行! (反向查找,输出与查找条件不相符的行)--color=auto : 可以将找到的关键词部分加上颜色的显示喔!

-n :顺便输出行号

      

基础正则表达式常见元字符

\:转义符,将特殊字符进行转义,忽略其特殊意义a\.b匹配a.b,但不能匹配ajb,.被转义为特殊意义\\\

^:匹配行首,^则是匹配字符串的开始^tux匹配以tux开头的行^^^^

$:匹配行尾,$则是匹配字符串的结尾tux$匹配以tux结尾的行$$$$

.:匹配除了换行符 \r\n之外的任意单个字符

[list]:匹配list列表中的一个字符

例: go[ola]d,[abc]、[a-z]、[a-z0-9]

[^list]:匹配任意不在list列表中的一个字符

例: [^a-z]、[^0-9]、[^A-Z0-9]

\{n,\}d

示例

  1. 查找特定字符

例如在test.txt文件中,多写了一个the,我想单独把the找出来,其中grep中-n表示显示行号,-i是区分大小写

  1. 使用-i命令表示不区分大小写

  1. 使用-v命令查找不包含“the”字符的行,并且配合-n一起使用显示行号

这里我将所有字符全部写在了一行,所以过滤的时候会将整行过滤。

  1. 利用中括号“【】”来查找集合字符

想要查找“shirt”与“short”这两个字符串时,可以发现这两个字符串均包含“sh”与“rt”。此 时执行以下命令即可同时查找到“shirt”与“short”这两个字符串,其中“[]”中无论有几个字符, 都仅代表一个字符,也就是说“[io]”表示匹配“i”或者“o”

4)若查找“oo”前面不是“w”的字符串,只需要通过集合字符的反向选择“[^]”来实现该目的。

例如执行“grep -n‘[^w]oo’test.txt”命令表示在 test.txt 文本中查找“oo”前面不是“w”的字符串。

发现这里还是存在二者均包含“w”。其实通过执行结果就可以看出,符合匹配标准的字符加粗显示,而上述结果中可以得知,

“#woood #”中加粗显示的是“ooo”,而“oo”前面的“o”是符合匹配规则的。同理“#woooooood #” 也符合匹配规则。若不希望“oo”前面存在小写字母,可以使用“grep -n‘[^a-z]oo’test.txt”命令实现,其中“a-z”表示小写字母,大写字母则通过“A-Z”表示。

grep -n '[^a-z]oo' test.txt

发现这里还存在大写字母想要去掉大写字母可以使用[^A-Z]

Grep -n ‘[^A-Z]oo’ test.sh

5)查找包含数字的行可以通过grep -n ‘[0-9]’ test.txt

6)查找行首“^” 与行尾字符:“$基础正则表达式包含两个定位元字符:“^”(行首)与“$”(行尾)。在上面的示例中, 查询“the”字符串时出现了很多包含“the”的行,如果想要查询以“the”字符串为行首的行,则 可以通过“^”元字符来实现”

Grep -n ‘^the’ test.txt

不想以英文开头则使用:

Grep -n ‘^[^a-zA-Z]’

7)”符号在元字符集合“[]”符号内外的作用是不一样的,在“[]”符号内表示反向选择,在“[]” 符号外则代表定位行首。反之,若想查找以某一特定字符结尾的行则可以使用“$”定位符。

例如,执行以下命令即可实现查询以小数点(.)结尾的行。因为小数点(.)在正则表达式

中也是一个元字符(后面会讲到),所以在这里需要用转义字符“\”将具有特殊意义的字符转

化成普通字符。

Grep -n ‘\.$’ test.txt

查询空白行:

Grep -n ‘^$’ test.txt

8)过滤空行和注释且注入到文件中

grep -v "^$\|^#" k.txt >2.txt

9)过滤出ip

Grep -o “[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+” /etc/sysconfig/network-scripts/ifcfg-ens33,+表示钱买你的字符串出现一次或多次,而*表示前面的字符出现0次1次或多次。

10)*表示匹配0次一次或多次

Grep -n “go[al]*d” test

表示其中al可以出现0次1次和多次

Grep -n “go[al]\{2\}d” test表示al出现两次

Grep -n “go[al]\{2,\}d” test在次数的后面加,表示至少不少于2次

Grep -n “go[al]\{2,5\}d” test表示出现2-5次

扩展:

Egrep -E -n ‘go[2]d’ test

Egrep即为grep的增强版功能,在使用的时候需要注意,它不再是使用双引号而是单引号,且在使用时,不需要再加转义符即\

Egrep -n ‘of|is|on’ test查询of,is,on字符串,其中的|意思并不是管道符而是(或)

Egrep -E -n ‘t(e|s)st’ test

Egrep -E -n ‘t(e|s)*st’ test

查询以t开头t结尾,中间包含至少一个o的字符串,执行以下命令即可实现

Grep -n ‘ts*t’ test

查询以t开头以t结尾,中间的s可有可无的命令

Grep -n ‘ts.*t’ test

查询以t开头以t结尾,且中间出现es次数不限

Grep -n “^t[(es)]t$” test

Grep -n ‘t\(es\)\{1,2\}t’ test

总结:元字符

通过上面几个简单的示例,可以了解到常见的基础正则表达式的元字符主要包括以下几个

^ 匹配输入字符串的开始位置。除非在方括号表达式中使用,表示不包含该字符集合。要匹配”^”字符本身,请使用"\^"

$ 匹配输入字符串的结尾位置。如果设置了RegExp对象的 Multiline属性,则"$”也匹配'\n'或'\r’,。要匹配”$"字符本身,请使用”\$"

. 匹配除"\r\n"之外的任何单个字符

\ 反斜杠,又叫转义字符,去除其后紧跟的元字符或通配符的特殊意义

* 匹配前面的子表达式零次或多次。要匹配“*"字符,请使用“\*”

[] 字符集合,匹配所包含的任意一个字符。例如,"[abc]"可以匹配"plain"中的"a"

[^] 赋值字符集合,匹配未包含的一个任意字符。例如,"[^abc]"可以匹配"plin"中任何一个字母

[n1-n2] 字符范围,匹配指定范围内的任意一个字符。例如,"[a-z]"可以匹配"a"到"z"范围内的任意一个小写字母字符。注意:只有连字符(-)在字符组内部,并且出现在两个字符之间时,才能表示字符的范围;如果出现在字符组的开头,则只能表示连字符本身

(n}  n 是一个非负整数,匹配确定的n次。例如,"o(2}"不能匹配"Bob"中的"o",但是能匹配"food"中的"oo"{n,} n是一个非负整数,至少匹配n次。例如,"o({2,)"不能匹配"Bob"中的"o”,但能匹配""fooood"中的所有o。"o(1,)"等价于"o+"。“o(0,]"则等价于"o*”

{n,m} m和 n均为非负整数,其中 n<=m,最少匹配n次且最多匹配m 次

正则工具

Cut工具

 列截取工具,cut命令从文件的每一行剪切字节,字符和字段,并将这额字符,字节,字段挟制标准输出,如果不指定file参数,cut命令将读取标准输入,必须指定-b,-c或-f标志之一

选项:

-b:按宁节截取

-c:按字符截取,常用于中文

-d:指定以什么为分隔符截取,默认为制表符

-f:通常和-d一起

案例:

Cat /etc/passwd | cut -d ‘:’ -f 1,表示-d为以:为分隔符,取第一列

Cat /etc/passwd | cut -d ‘:’ -f 1,3表示以:为分隔符取第一列和第三列,不连续

Cat /etc/passwd | cut -d ‘:’ -f 1-3表示以:为分隔符,取一到三列,连续

ls | cut -b 3表示按字节截取

Ls | cut -c 2 上组代码中-d是以第几个字符来截取,而-c则是以中文字符截取

截取331081504806027044938:

Sort工具

  sort是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序,例如数据和字符的排序就不一样,用法:sort 【选项】 【参数】

常用选项:

-t:指定分隔符,默认使用「Tab]键或空格分隔-

-k:指定排序区域,哪个区间排序

-n :按照数字进行排序,默认是以文字形式排序

-u:等同于uniq,表示相同的数据仅显示一行,注意:如果行尾有空格去重就不成功

-r:反向排序,默认是升序,-r就是降序

-o:将排序后的结果转存至指定文件

案例:

Sort sort.txt 什么都不加的话即为默认按第一列升序,字母即从a到z由上

Sort -n -t: -k3 sort.txt 以冒号为分隔符,以数字大小对第三列排序

Sort -nr -t: -k3 passwd.txt 以冒号为分隔符,以数字大小对第三列排序(降序)

Sort -nr -t: -k3 sort.txt -o sort.sh排序后的结果不在屏幕上输出二十输出到sort.sh文件中。

Sort -u sort.txt 避免重复的内容(重复的行可以是不连续的)

Uniq工具

  主要用于去除连续的重复行

注意:是连续的行,所以通常和sort结合使用先排序使之变成连续的行在执行去重操作,否则不连续的重复行不能去重

语法:uniq 【选项】【参数】

常用选项:

-c:对重复的行进行计数;

-d:仅显示重复行;

-u:仅显示出现一次的行;

案例

awk ‘{print $1}‘ sort.sh | uniq -c 表示相同的字符连续出现的次数

awk ‘{print $1}‘ sort.sh | uniq -d表示只显示重复的内容

awk ‘{print $1}‘ sort.sh | uniq -u只显示只出现过一次的行

查看当前状态中是连接状态的网络信息

netstat -natpul | grep "ESTABLISHED" | awk '{print $6 " " $4}' | uniq -c

Tr工具

 它可以用一个字符来替换另一个字符,或者可以完全出去一些字符,也可以用来重复字符

语法:tr 【选项】 set1 【set2】

从标准输入中替换,缩减或删除字符,并将结果写道标准输出

常用选项:

-d 删除字符

-s 删除所有重复出现的字符,只保留一个

Cat sort.sh | tr -d “lnjnb”

Cat sort.sh | tr -s “x”

Sed工具

文本处理工具,读取文本内容,根据指定的条件进行处理,如删除、替换、添加等

可在无交互的情况下实现相当复杂的文本处理操作

被广泛应用于Shell脚本,以完成自动化处理任务

sed依赖于正则表达式

工作原理:

Sed命令格式

sed -e '编辑指令' 文件1 文件2 …

sed -n -e '编辑指令' 文件1 文件2 …

sed -i -e '编辑指令' 文件1 文件2

常用选项

-e 指定要执行的命令,只有一个编辑命令时可省略

-n 只输出处理后的行,读入时不显示

-i 直接编辑文件,而不输出结果

-f 用指定的脚本文件来处理输入的文本文件

原文地址:https://blog.csdn.net/a_b_e_l_

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


jquery.validate使用攻略(表单校验) 目录 jquery.validate使用攻略1 第一章&#160;jquery.validate使用攻略1 第二章&#160;jQuery.validate.js API7 Custom selectors7 Utilities8 Validato
/\s+/g和/\s/g的区别 正则表达式/\s+/g和/\s/g,目的均是找出目标字符串中的所有空白字符,但两者到底有什么区别呢? 我们先来看下面一个例子: let name = &#39;ye wen jun&#39;;let ans = name.replace(/\s/g, &#39;&#3
自整理几个jquery.Validate验证正则: 1. 只能输入数字和字母 /^[0-9a-zA-Z]*$/g jQuery.validator.addMethod(&quot;letters&quot;, function (value, element) { return this.optio
this.optional(element)的用法 this.optional(element)是jquery.validator.js表单验证框架中的一个函数,用于表单控件的值不为空时才触发验证。 简单来说,就是当表单控件值为空的时候不会进行表单校验,此函数会返回true,表示校验通过,当表单控件
jQuery.validate 表单动态验证 实际上jQuery.validate提供了动态校验的方法。而动态拼JSON串的方式是不支持动态校验的。牺牲jQuery.validate的性能优化可以实现(jQuery.validate的性能优化见图1.2 jQuery.validate源码 )。 也可
自定义验证之这能输入数字(包括小数 负数 ) &lt;script type=&quot;text/javascript&quot;&gt; function onlyNumber(obj){ //得到第一个字符是否为负号 var t = obj.value.charAt(0); //先把非数字的都
// 引入了外部的验证规则 import { validateAccountNumber } from &quot;@/utils/validate&quot;; validator.js /*是否合法IP地址*/ export function validateIP(rule, value,cal
VUE开发--表单验证(六十三) 一、常用验证方式 vue 中表单字段验证的写法和方式有多种,常用的验证方式有3种: data 中验证 表单内容: &lt;!-- 表单 --&gt; &lt;el-form ref=&quot;rulesForm&quot; :rules=&quot;formRul
正则表达式 座机的: 例子: 座机有效写法: 0316-8418331 (010)-67433539 (010)67433539 010-67433539 (0316)-8418331 (0316)8418331 正则表达式写法 0\d{2,3}-\d{7,8}|\(?0\d{2,3}[)-]?\d
var reg = /^0\.[1-9]{0,2}$/;var linka = 0.1;console.log (reg.test (linka)); 0到1两位小数正则 ^(0\.(0[1-9]|[1-9]{1,2}|[1-9]0)$)|^1$ 不含0、0.0、0.00 // 验证是否是[1-10
input最大长度限制问题 &lt;input type=&quot;text&quot; maxlength=&quot;5&quot; /&gt; //可以 &lt;input type=&quot;number&quot; maxlength=&quot;5&quot; /&gt; //没有效
js输入验证是否为空、是否为null、是否都是空格 目录 1.截头去尾 trim 2.截头去尾 会去掉开始和结束的空格,类似于trim 3.会去掉所有的空格,包括开始,结束,中间 1.截头去尾 trim str=str.trim(); // 强烈推荐 最常用、最实用 or $.trim(str);
正则表达式语法大全 字符串.match(正则):返回符合的字符串,若不满足返回null 字符串.search(正则):返回搜索到的位置,若非一个字符,则返回第一个字母的下标,若不匹配则返回-1 字符串.replace(正则,新的字符串):找到符合正则的内容并替换 正则.test(字符串):在字符串中
正整数正则表达式正数的正则表达式(包括0,小数保留两位): ^((0{1}.\d{1,2})|([1-9]\d.{1}\d{1,2})|([1-9]+\d)|0)$正数的正则表达式(不包括0,小数保留两位): ^((0{1}.\d{1,2})|([1-9]\d.{1}\d{1,2})|([1-9]+
JS 正则验证 test() /*用途:检查输入手机号码是否正确输入:s:字符串返回:如果通过验证返回true,否则返回false /function checkMobile(s){var regu =/[1][3][0-9]{9}$/;var re = new RegExp(regu);if (r
请输入保留两位小数的销售价的正则: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/ 1.只能输入英文 &lt;input type=&quot;text&quot; onkeyup=&quot;value
判断价格的正则表达式 价格的正则表达式 /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/; 1 解析:价格符合两种格式 ^ [1-9]\d*(.\d{1,2})?$ : 1-9 开头,后跟是 0-9,可以跟小数点,但小数点后要带上 1-2 位小数,类似 2,2
文章浏览阅读106次。这篇文章主要介绍了最实用的正则表达式整理,比如校验邮箱的正则,号码相关,数字相关等等,本文给大家列举的比较多,需要的朋友可以参考下。_/^(?:[1-9]d*)$/ 手机号
文章浏览阅读1.2k次。4、匹配中的==、an==、== an9、i9 == "9i"和99p==请注意下面这部分的作用,它在匹配中间内容的时候排除了说明:当html字符串如下时,可以匹配到两处,表示匹配的字符串不包含and且不包含空白字符。说明:在上面的正则表达式中,_gvim正则表达式匹配不包含某个字符串
文章浏览阅读897次。【代码】正则表达式匹配a标签的href。_auto.js 正则匹配herf