算法与正则表达式

网友投稿 293 2022-11-04

算法与正则表达式

算法与正则表达式

一、算法1、冒泡排序类似气泡上涌的动作,会将数据在数组中从小到大或从大到小不断的向前移动。

基本思想:

冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部.上升到顶部

算法思路:

冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一 般为要排序的数组长度减1次,因为最后一次循环只剩下一 一个数组元素, 不需要对比,同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数随排序轮数而减少

#!/bin/basharr=(52 66 32 77 1 22 95)echo "老的数组顺序为:${arr[@]}"length=${#arr[*]}for ((a=1; a

2、直接选择排序直接选择排序:与冒泡排序相比,直接选择排序的交换次数更少,所以速度会快些

基本思想:

将指定排序位置与其它数组元素分别对比,如果满足条件就交换元素值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换(如从第一个元素开始排序),这样排序好的位置逐渐扩大,最后整个数组都成为已排序好的格式

#!/bin/basharr=(52 66 32 77 1 22 95)echo "老的数组顺序为:${arr[@]}"length=${#arr[*]}

for ((a=1; a

for ((a=1; a

doneecho "排序后的数组顺序为:${arr[@]}"

这个直接选择排序与冒泡排序是很相似的,他们的区别是直接选择排序1轮只换位一次,与冒泡相比大大提高了速度。

3、反转排序以相反的顺序把原有数组的内容重新排序

基本思想:

把数组最后一个元素与第一个元素替换,倒数第二个元素与第二个元素替换,以此类推,直到把所有数组元素反转替换

#!/bin/basharr=(1 2 3 4 5 6)echo "排序前的数值顺序为: ${arr[@]}"br/>length=${#arr[@]}#拿对半分的前几个数作为参照物for ((a=0; a

二、一些命令(sort、uniq、tr、cut、split、eval )1.sort 排序命令sort命令:以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序;比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

格式:

sort [选项] 参数

常用选项:

-f:忽略大小写,会将小写字母都转换为大写字母来进行比较。-b:忽略每行前面的空格。-n:按照数字进行排序。-r:反向排序。-u:等同于uniq,表示相同的数据仅显示一行。-t:指定字段分隔符,默认使用[Tab]键分隔。-k:指定排序字段。-o <输出文件>:将排序后的结果转存至指定文件。不加选项默认按字母排序,首字母相同看第二个;小写在前,大写在后。

-f文件里行前有空格会排在前面

先建一个文件

2.uniq 去除重复行命令用于报告或者忽略文件中连续的重复行,常与 sort 命令结合使用

格式:

uniq [选项] 参数

cat ss | uniq 选项

常用选项:

-c:进行计数,并删除文件中重复出现的行。-d:仅显示连续出现的重复行。-u:仅显示出现一次的行。先建一个文件

3.tr 字符转换常用来对来自标准输入的字符进行替换、压缩和删除

格式:

tr [选项] [参数]

参数:

字符集1:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数"字符集2"指定转换的目标字符集。但执行删除操作时,不需要参数"字符集2"。

字符集2:指定要转换成的目标字符集,

常用选项:

-c:保留字符集1的字符,其他的字符(包括换行符\n)用字符集2替换。-d:删除所有属于字符集1的字符。-s:将重复出现的字符串压缩为一个字符串;用字符集2替换字符集1。-t:字符集2替换字符集1,不加选项同结果。

从Windows中直接复制到Linux的文件,需要删除"^M"符号,否则无法正常运行。

因为Linux中遇到换行符"\n"会进行回车+换行的操作,回车符反而只会作为控制字符"^M"显示,不发生回车操作。而Windows中要回车符+换行符"\r\n"才会回车+换行,缺少一个控制符或顺序不对都不能正确的另起一行。

4.cut 显示和连接文件命令cut命令有两个主要的功能,1.显示文件内容,2.连接多个或多个文件

格式:

cut [选项] 参数

常用选项:

-f:通过指定哪一个字段进行提取。cut命令使用"TAB"作为默认的字段分隔符,-d:"TAB"是默认的分隔符,使用此选项可以更改为其他的分隔符。--complement:此选项用于排除所指定的字段。--output-delimiter:更改输出内容的分隔符。

5.split 拆分命令linux下将一个大文件拆分成若干个小文件的命令

格式:

split 选型 参数 原始文件 拆分后文件前缀名

常用选项:

-l:以行数拆分-b:以大小拆分

6.eval 命令作用:命令字前加上eval时, shell会在执行命令之前扫描它两次。eval命令将首先会先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。

示例

正则表达式的特点是:

灵活性、逻辑性和功能性非常强;可以迅速地用极简单的方式达到字符串的复杂控制。对于刚接触的人来说,比较晦涩难懂。通常用于判断语句中,用来检查某一字符串是否满足某一格式

正则表达式是由普通字符与元字符组成。普通字符包括大小写字母、数字、标点符号以及一些其他符号。元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式基础正则表达式常见元字符:(支持的工具:grep、egrep、sed、awk)

\:转义字符,用于取消特殊符号的含义,例:!、ln、\$等^:匹配字符串开始的位置,例:^a、^the、^#、^[a-z]$:匹配字符串结束的位置,例: word$、^$匹配空行.:匹配除\n之外的任意的一个字符,例: go.d、g..d:匹配前面子表达式o次或者多次,例:good、 go.*d[list] :匹配list列表中的一个字符,例: go[ola]d,[abc]、[a-z]、[a-z0-9]、[0-9]匹配任意一位数字[^list]:匹配任意非list列表中的一个字符,例:[^0-9]、[^A-Z0-9]、[^a-z]匹配任意一位非小写字母{n}:匹配前面的子表达式n次,例: go{2}d、'[0-9]{2}'匹配两位数字{n, }:匹配前面的子表达式不少于n次,例: go{2,}d、' [0-9]{2,}'匹配两位及两位以上数字{n,m}:匹配前面的子表达式n到m次,例: go{2,3}d、' [0-9]{2,3}'匹配两位到三位数字注: egrep、 awk使用{n}、{n,}、{n,m}匹配时“{}"前不用加"\"

扩展正则表达式元字符:(支持的工具:egrep、 awk)

示例1

获取邮件名

用户名长度在6-18位,任意大小字母,数字,除了@符号和空格以外的任意符号,开头只能是或者字母;子域名。[二级域]长度任意,符号只能包含"-." ;.顶级域长度2-5,任意大小字母。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:采用TMS320VC5402作主控制器芯片实现USB语音传输接口装置设计
下一篇:GC参考手册jvm垃圾回收详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~