定制app开发15.正则表达式&扩展正则&字符处理

📋 个人简介
💖 作者简介:大家好,我是小鹏linux,定制app开发运维领域新星创作者,😜
📝 个人主页:🔥
🎉 支持我:点赞👍+收藏⭐️+留言📝
💬格言:定制app开发你未必出类拔萃,定制app开发但一定与众不同!🔥
📕 系列专栏:
               🍎 阶段一:windows基础                        目前原创16篇
               🍎 阶段二:Linux基础知识                      目前原创38篇
               🍎 阶段三:shell基础+shell高级              目前原创15篇
               🍎 阶段四:python定制app开发基础及自动化应用      定制app开发定制app开发定制app开发定制app开发原创未开始
               🍎 阶段五:Linux网络服务                       原创未开始
               🍎 阶段六:定制app开发集群原理及架构                     原创未开始
               🍎 阶段七:定制app开发云计算虚拟化技术                 原创未开始

​​​​​​​

 

目录


1.定制app开发正则表达式:

定制app开发因为系统中会产生很多信息,定制app开发有些信息很重要,定制app开发有些信息却没那么重要。定制app开发这就需要某个功能来对信息过滤,定制app开发找到有用的关键信息。

1.1概述:定制app开发正则表达式用来在文件定制app开发中匹配符合条件的字符串,定制app开发通配符用来匹配符合条定制app开发件的文件名。定制app开发其实这种区别只在shell中适用, 定制app开发因为用来在文件当中搜定制app开发索字符串的命令,如grep、awk、定制app开发等命令可以支持正则表达式,定制app开发而在系统当中搜索文件的命令, 如:ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。

正则表达式即是规范字符的书写格式,是使用,实现文字、字符格式上的规定。

如:邮箱的书写格式为:XXXX@XXXX.XXX,此格式即为邮箱地址的正则表达式。

1.2基础正则表达式

元字符

作用

.

匹配除换行符以外的任意一个字符

*

前一个字符匹配0或任意多次

^

匹配行首。例:^hello会匹配以hello开头的行

$

匹配行尾。例:hello$会匹配以hello结尾的行

[]

匹配中括号中指定的任意一个字符,只匹配一个字符。例:[aeiou]匹配任意一个元音字母。[0-9]会匹配任意一位数字。[a-z][0-9]匹配小写字和一位数字构成的两位字符

[^]

匹配除中括号的字符以外的任意一个字符。例:[^0-9]匹配任意一位非数字字符

\

转义符。用于取消,将特殊符号的含义取消

\{n\}

表示其前面一个字符恰好出现n次。例:[0-9]\{4\} 匹配4位数字。[1][3-8][0-9]\{9\}匹配手机号

\{n,\}

表示其前面一个字符出现不小于n次。例:[0-9]\{2,\}匹配2位及以上的数字

\{n,m\}

表示前面的一个字符至少出现n次,最多出现m次。例:[a-z]\{6,8\}匹配6-8位的小写字母

\符号:

我们之前了解到.*代表的是任意长度的不包含换行的重复字符。但是如果想匹配任意长度.的时候。就需要用到\了。

\<符号和\>符号:

这两个符号分别用于界定左边界和右边界。比如\<hello\>用来精确匹 配hello这个字符串。

2.保留字

Linux中,有很多的特殊符号,可以帮助我们进行正则表达式的制定,具体常用符号如下:

*---通配符,表示任意长度的任意字符,如:rm -rf /mnt/ff*
?---单配符,表示一位长度的任意字符
[ ]---单个字符的取值范围,如: [0-9] [02468] [a-z] [A-Z]
{ }多字符的取值范围,如{ab,bc,cd}
" "主用于明确命令参数的范围,如:date +"20%y-%m-%d%H:%M:%S"
' '多用于引号嵌套时使用,如:echo 'i say :"hello"'
``反单引,所引起来的内容,先当做命令执行,再把执行结果交给其他命令使用。如:echo "the time is :date"
$变量值提取功能 用户身份标识符
\转义字符,提取后边符号的引申含义, 如:PS1="[\u@\h \W]\$"
|管道符,格式:前后两个命令,前命令的结果交给后命令当做输入信息使用。如:ll /etc
&后台执行符, 在命令后面加上&后,该命令将被放入到后台执行, 如:find / -name f1 &jobs ---查看后台进程
&&命令连接、顺序执行,如:echo aaaaa && echo bbbbb ,要求:必须每个命令都正确执行
| |多个命令连接,前命令执行失败,才会去执行后命令,如: cat f1 | | echo bbbbb
>输出重定向,格式:前命令,后文档,功能:把前命令的运行结果,当做文字保存到文档中。如:ls -l /var > /mnt/f1
<输入重定向,格式:前命令,后文档,功能:把后文档的文字内容,当做前命令的输入信息使用,如:write zhang < /mnt/f1 mail zhang < /mnt/f1

关于以上各符号的案例中使用的命令,下面来做一下分析、介绍:

3.&&:与运算符

功能:两个条件必须都满足,结果才是成立的;

如:A 与 B 到校上课

=成立
没来=不成立
没来=不成立
没来没来=不成立

分析:当A条件满足时,B条件才有审查的必要;但是当A条件不满足时,无论B条件是否满足,结果都是不成立的,则B条件就不会被审核了。所以,对应 cat f1 && echo bbb,若f1文件不存在,cat命令执行失败,则后面echo bbb的命令将不再执行。

4.| | :

功能:两个条件至少一个是满足的,结果就是成立的

例:A 或 B 到校上课

=成立
没来=成立
没来=成立
没来没来=不成立

分析:当A条件满足时,无论B条件是否满足,结果都是成立的,则B条件

就不会被审核了。只有当A条件不满足时,B条件才有审查的必要。

所以,对应 cat f1 && echo bbb,若f1文件不存在,cat命令

执行失败,则后面echo bbb的命令才会执行。若cat f1执行成功,

则后面的echo bbb将不再执行。

5.字符处理

Linux中对于文档中文字、字符的处理也有很多细节操作的命令,具体如下:

5.1 head、tail命令

head -n 3 f1 ---显示文档的前3行

head -n -3 f1 ---排除文档的最后3行,显示前面的文字

tail -n 3 f1 ---显示文档的最后3行

tail -n +3 f1 ---从第3行开始显示到结尾

对于head –n -3 和tail –n +3 的行数控制,其原理是文档中每行文字的读取都借助与文档内部的行指针操作,指针指向哪一行,就会读取哪一行。但是当文件读取前,指针是指向第一行之前的空处,所以只有指针下移一行,才会读取到第一行的文字,因此tail –n +3 实质是让指针下移三次,开始读取,所以才会读取到第三行的文字;而head–n -3是避除指针可到的最后三行,所以是不读取倒数第三行的。

命令组合应用:tail -n +3 f1 | head -n 3 ---显示3-5行

5.2 grep抓取命令

grep命令可以从文档中抓取显示包含指定字符的行,在日常使用中比较常用。

grep "name" f1 ---抓取f1中包含name的行

grep -n "name" f1 --- -n表示结果中显示行号

grep -i "name" f1 --- -i 表示忽略大小写

grep -v "name" f1 --- -v 显示不包含指定字符的行

grep "^name" f1 --- "^name" 以指定字符开头的行

grep "name$" f1 --- "name$" 以指定字符结尾的行

活用:grep "^name$" f1 ---抓取显示一行仅有name字符的行

grep -n "^$" f1 ---抓取显示空行及其行号

ll /etc | grep "^d" | less ---显示/etc/所有目录。

注: ll后目录文件的第一个字符显示为d

5.3 wc统计命令

wc命令是对文档文字做统计功能的,最常用的是行数上的统计。

wc -l f1 --- -l 统计文档中有几行文字

其他参数: -c 字节数 -m 字符数 -w单词数 -L 最长行的长度

活用:ll /etc | grep "^d" | wc -l ---统计/etc/下目录的个数

注:ll后一个文件显示为一行,所以统计行数即为统计目录数

5.4 sort 排序显示

sort命令用于对显示内容的排序处理。

sort -rn -k 2 f2 ---按照文档的第二列的数值大小,降序(即大->

小)排序显示,-r 降序,不写默认升序 -n

按照数值大小比较排序 -k 指定按照第几列

排序

sort -rn -u -k 2 f2 --- -u表示去除重复行

sort -t ":" -rn -k 2 f2 --- -t 指定列之间的分隔符,不写,默

认空格作为分隔符

5.5 cut命令

cut命令,截取指定列显示

cut -d " " -f 3 f1 ---截取文档中的第3列, -d 指定分隔符

-f 指定显示第几列

但是,cut命令对分隔符连续较多的情况,审核较为死板,很难按照我们想要的效果实现截取,如有以下文件:

aaa 111 AAA

bbb 222 BBB

则每行文字中各列间的空格数不同,在用cut时,是用第一个空格作为分隔符,第二个空格则被视为第二列,一次类推,因此,在截取指定列时十分不便。所以一般在连续分隔符个数不统一时,我们更习惯使用awk命令。

5.6 awk命令

awk命令功能十分强大,可根据需要抓取、截取指定的列或行。具体如下:

awk -F" " '{print $2,$3}' f1 ---截取显示文档的第2、第3列,-F 指

定分隔符, $2,$3表示显示第几列

awk -F" " '($2>300){print $2,$3}' f1

--- 第二列的值大于300的行,显示其第2、第3列,()中指定筛选条件

awk 'NR==4 || NR==3' f1 ---显示第3和第4行, NR表示行号

awk '/data/ {print $2}' f1 ---抓取包含指定字符的行,再进行截取列

awk '$4 ~ /data/ ' f1 ---抓取第4列包含指定字符的行

awk '$4 !~ /data/ ' f1 ---抓取第4列不包含指定字符的行

5.7 sed命令

sed命令是一个十分复杂的文字处理命令,其中有很多的参数和格式,但可以实现几乎所有的字符处理需求,常用的几个参数如下

sed '1,3d' f1 ---不显示第1-第3行, 1,$可表示1-文件尾

sed '/data/d' f1 ---不显示包含指定字符的行

sed 's/data/hello/p' f1 ---查找文档中的指定字符,替换成新字符

sed 's/data/&123/g' f1 ---查找文档中的指定字符,在其后追加字符

sed -n '/data/p' f1 ---显示包含指定字符的行

具体sed的其他命令和参数可见下面几个表格:

命令功能
*a*在当前行后面加入一行或者文本
blabel 分支到脚本中带有标号的地方,如果标号不存在就分支到脚本的末尾
*c*用新文本改变或者替代本行的文本
d从模式空间中制删除指定行
D删除模式空间中第一行
*i*在当前行上面插入文本
h拷贝模式空间到内存缓冲区
H追加模式空间内容到内存缓冲区
g获得内存缓冲区的内容,并替代当前模式空间中的文本
G获得内存缓冲区的内容,并追加当前模式空间中的文本
命令功能
l列表不能打印所指定的字符清单
n读取下一个输入行,用下一个命令处理新的行
N追加下一个输入行到模式空间后面并在二者之间嵌入一个新的行,改变当前行的号码
p打印模式空间的行
P打印模式空间的第一行
q退出sed
r file从file中读取行
t labelif**分支,从最后一行开始开始,一旦满足要求,将直接到带有标号的命令出,或者到脚本的末尾**
T label错误分支,从最后一行开始开始,一旦满足要求,将直接到带有标号的命令出,或者到脚本的末尾
命令功能
w file写并追加到模块空间file末尾
W file写并追加到模块空间的第一行到file末尾
!表示后面的命令对所有没有被选定的行发生作用
s/re/string/用string替换正则表达式re
=打印当前行号码
#command把注释扩展到下一个换行符以前
替换标记
g行内全面替换
p打印行
w把行写入一个文件
命令功能
替换标记(二)
x互换模块空间的文本和缓冲区的文本
y把一个字符翻译为另外的字符(此替换标记不可用正**则表达式)**
选项
-e command允许多点编辑
--expression=command同上
-h,--help & --version帮助 & 查看sed 版本 (2个选项)
-n,--quiet,--silent取消默认输出
-f script-file引导sed脚本文件名
--file=script-file同上

Sed匹配符号

元字符功能例子匹配
^指定行的开始/^linux/所有以linux开头的行
$指定行的末尾/linux$/所有以linux结束的行
.匹配一个非换行符的字符/l…x/匹配所有包含l后面3个字符任意,最后为x的行
*匹配零或多个字符/*linux/匹配所有模板是一个或多个空格后紧跟linux的行
[]匹配一个指定范围内的字符[Ll]inux匹配包含Linux或linux的行
[^]匹配一个不再指定范围内的字符/a-egztp/匹配不再指定a-e及g-z区域内的开头并紧跟tp的字段
元字符功能例子匹配
&保存所搜字符用**来替换其他字符**s/linux/*&*/&*表示搜索字符串,因此linux将变为*linux****
/<指定单词的开始/<linux/匹配包含linux开头的单**词的行**
/>指定单词的结束/linux>/匹配包含以linux结尾的**单词的行**
x{m}重复字符X,M多少次/o{5}/匹配包含5个o的行
x{m,}重复字符X,至少M次*/o{5,}*匹配至少5个o的行

由上表可见,sed的功能十分繁复,所以我们初学可以暂时不必记忆那么多的格式,只需要先掌握咱们案例中最常用的几项参数设置就好。

6.扩展正则表达式

顾名思义,扩展正则表达式一定是针对基础正则表达式的一些补充。扩展正则表达式比基础正则表达式多了几个重要的符号。不过在使用这些扩展符号的时候需要使用egrep命令。

扩展元字符

作用

+

前一个字符匹配1次或任意多次。例:go+gle会匹配gogle、google或gooole如果有更多个o也会匹配。

前一个字符匹配0次或1次。如colou?r可以匹配colour或color。

|

匹配两个或多个分支选择。如was|his会匹配包含was的行,也会匹配包含his的行。

()

匹配其整体为一个字符,可以理解为由多个单个字符组成的大字符。如(dog)+会匹配dog、dogdog、dogdogdog等,因为被()包含的字符会当成一个整体。但hello (world | earth ) 会匹配hello world 及 hello earth

6.1()括号模式单元的使用:

  1. [root@localhost ~]# egrep --color=auto "(l..e).*(l..e)" ./test
  2. love is lover
  3. like is liker
  4. love is liker
  5. like is lover
  6. [root@localhost ~]# egrep --color=auto "(l..e).*(\1)" ./test

#可用(\1)表示引用第一个模式单元,也就是第一次匹配第一行(l..e)在匹配到love的时候,就确定了l和e之间的..为o和v,在之后(\1)引用的时候也只会匹配love的字符串。

第二行like同理。第二行匹配时..变成了ik,所以匹配到了后边like字符串,而不能匹配

love字符串。

love is lover

like is liker

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发