模式匹配

_sed命令

时光怂恿深爱的人放手 提交于 2020-01-19 04:45:27
三大文本处理工具:grep,sed(流编辑器),awk(报告文本生成器) sed基本用法: sed 是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。 sed:Stream EDitor 用来操作纯ASCII码的文本,逐行编辑 行编辑器 逐行读取到内存空间,在内存中做处理然后显示到屏幕上来 这段内存空间称模式空间,sed按行处理,不一定每一行都会读取到内存中去,符合条件的读进模式空间做模式条件匹配,如果被条件匹配到了,在模式空间中使用后面的编辑命令对其完成编辑并且将编辑的结果输出到屏幕上来。 默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕 sed [options] 'AddressCommand' file ... -n:静默模式,不再默认显示模式空间中的内容 -i:直接修改原文件 -e SCRIPT -e SCRIPT:可以同时执行多个脚本 -f /PATH/TO/SED

美妙的字符串之KMP算法

ぐ巨炮叔叔 提交于 2020-01-19 01:55:20
概述 讲解非常非常详细的KMP算法 在S串中查找P串的位置所在 暴力算法:S:i, P:j 若s[i] == p[j],i++,j++; 若s[i]!=p[j], i = i-(j-1)+1, j = 0; 之前的已匹配段回溯肯定导致失配,因为p[0]!=p[last(当前不匹配的j位置)-1]; KMP算法:i不回退,只需要移动j。 1. 对模式串进行处理:next[j]是不匹配时的j下一步回溯位置,取决于当前字符的字符串中有最大长度的相同前缀后缀。 2. 对模式串P的处理:i从0-plen-1,遍历得到next[], 当某个字符失配时,该字符对应的next值会告诉你下一步匹配中,模式串应该跳到那个位置,如果next[j] = 0或者-1,则跳到模式串的开头字符,若next[j] = k 且k>0,代表下次匹配跳到j之前的某个字符,而不是跳到开头,且具体调过来k个字符。 int next[1000000+100]; void kmp_pre(char x[], int n){ int i, j; i= 0; j = next[0] = -1; while(i < n){ while(j!=-1 && x[i]!=x[j]) j = next[j]; next[++i] = ++j; } } int KmpSearch(char *s, char *p){ int i =0;

阻塞队列BlockingQueue之ASynchronousQueue

自作多情 提交于 2020-01-18 22:15:43
一、SynchronousQueue简介   Java 6的并发编程包中的SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样。 不像ArrayBlockingQueue或LinkedListBlockingQueue,SynchronousQueue内部并没有数据缓存空间,你不能调用peek()方法来看队列中是否有数据元素,因为数据元素只有当你试着取走的时候才可能存在,不取走而只想偷窥一下是不行的,当然遍历这个队列的操作也是不允许的。队列头元素是第一个排队要插入数据的 线程 ,而不是要交换的数据。数据是在配对的生产者和消费者线程之间直接传递的,并不会将数据缓冲数据到队列中。可以这样来理解:生产者和消费者互相等待对方,握手,然后 一起 离开。 特点: 1、不能在同步队列上进行 peek,因为仅在试图要取得元素时,该元素才存在; 2、除非另一个线程试图移除某个元素,否则也不能(使用任何方法)添加元素;也不能迭代队列,因为其中没有元素可用于迭代。队列的头是尝试添加到队列中的首个已排队线程元素; 如果没有已排队线程,则不添加元素并且头为 null。 3、对于其他 Collection 方法(例如 contains),SynchronousQueue 作为一个空集合。此队列不允许

KMP模式匹配

我的梦境 提交于 2020-01-18 19:34:26
A[1~N]是否为B[1~M]的子串 next[1]=0; for(int i=2,j=0;i<=n;i++) { while(j>0&&a[i]!=a[j+1]) j=next[j]; if(a[i]==a[j+1]) j++; next[i]=j; } for(int i=1,j=0;i<=m;i++) { while(j>0&&(j==n||b[i]!=a[j+1])) j=next[j]; if(b[i]==a[j+1]) j++; f[i]=j; //if(f[i]==n) A在B中出现一次 } 来源: https://www.cnblogs.com/ChildeZhe/p/12209931.html

Sed基础入门

我怕爱的太早我们不能终老 提交于 2020-01-17 06:58:55
参照:张昊著《LINUX Shell编程从入门到精通》,Richard Blum著《Linux命令行与shell脚本编程大全》 希望大家在学习前先看看正则表达式,正则表达式在Linux文本处理中会经常用到,这里不会介绍正则表达式。 【一、初识sed】 sed是编辑器,是基于行的,按顺序对每一行执行命令。 命令选项: -e script : 在处理输入时,将script中指定的命令添加到运行的命令中 -f file: 在处理输入时,将file中指定的命令添加到运行的命令中 -n: 不要主动输出,等待p输出命令时才输出 要在命令行上执行多个命令,要用-e选项,命令之间用 ; 分隔 如:sed –ne ‘=; p’ /etc/passwd 要读取文件中的sed命令,使用-f选项 如上图中,s代表替换命令,找到bash并用mysh替换,找到包含gr的行打印出来,可以看到,/bin/bash已被修改为/bin/mysh 【二、sed编辑器基础】 删除(d) 对匹配的行进行删除操作 sed ‘2d’ data 删除第2行 sed ‘2,$d’ data 删除第2行到尾行 替换(s) 替换标记: 形式:s/pattern/replacement/flags flags 数字:表明新文本将替换一行中第几处模式匹配的地方 g: 全局替换 p: 将模式匹配的行替换后的内容打印出来 w file:

安卓开发艺术探索一——Activity的生命周期和启动模式

人走茶凉 提交于 2020-01-16 13:24:49
文章目录 Activity的生命周期和启动模式 Activity的生命周期 正常情况下的生命周期 异常情况下的生命周期 1.系统配置改变导致活动被杀死并重新创建 2.资源内存不足导致低优先级的Activity被杀死 Activity的启动模式 启动模式的设置 IntentFilter的匹配规则 1.action的匹配规则 2.category的匹配规则 3.data的匹配规则 参考资料 Activity的生命周期和启动模式 Activity的生命周期 正常情况下的生命周期 onCreate:活动正在被创建。在此方法内可以做一些初始化工作 onReStart:活动正在重新启动。用户从其他活动回到当前活动时就会调用此方法。 onStart:活动正在被启动。此时活动已经可见,但未出现在前台,无法和用户交互 onResume:活动已经可见,并开始活动。(和onStart对比:两者都表示活动已经可见,onStart时活动还在后台,onResume时活动显示在前台) onPause:活动正在停止,正常情况下,onStop紧接着会被调用。此方法不能做耗时操作,否则会影响新活动的显示 onStop:活动即将停止,此方法不能做耗时操作 onDestroy:活动即将被销毁,可以做一些回收工作和资源释放 异常情况下的生命周期 1.系统配置改变导致活动被杀死并重新创建 如从竖屏切换到横屏时

scala学习之模式匹配

 ̄綄美尐妖づ 提交于 2020-01-16 09:07:44
scala中有一个灰常强大的东西,叫做模式匹配。可以理解为Switch,只是比它更加强大。 var sign = -1 val ch:Char = '+' /** * 模式匹配:更好用的switch */ ch match { case '-' => sign = -1 case '+' => sign = 1 case _ => sign = 0 } 和switch不同的是,没一个匹配条件后面,不需要break(想到当年写switch,忘记break的痛苦经历、、、),不会掉入下一个分支。 如果想要添加多个case标签,可以不用从case’0’写道case’9’,可以向下面这样做: ch match { case '-' => sign = -1 case '+' => sign = 1 case _ if Character.isDigit(ch) => sign = Character.digit(ch,10) case _ => sign = 0 } 类型模式 //类型模式 var obj : Any = 1024 var o = obj match { case x:Int => x case s:String =>Integer.parseInt(s) case _:BigInt =>Int.MaxValue case _ => 0 } 列表、元组、数据匹配 var

shell中各种括号()、(())、[]、[[]]、{}的作用

北慕城南 提交于 2020-01-15 17:21:05
技巧小结: 字符串比较用双中括号[[ ]];算数比较用单中括号[ ]——左右留空格 算数运算用双小括号(( )) ;shell命令及输出用小括号( )——左右不留空格 快速替换用花括号{ }——左右留空格 反单引号起着命令替换的作用 单括号(): 另开命令组——小括号中的内容会开启一个子shell独立运行;括号中以分号连接,最后一个命令不需要;各命令和括号无空格 得到命令输出——a=$(command), 等同于a=$ command ,得到命令输出传递给变量a 初始化数组——array=(a b c d) 双括号(()): 省去$符号的算术运算—— for((i=0;i<5;i++)); if (($i<5)); a=5; ((a++)) 可将 $a 重定义为6;括号内支持多个表达式用逗号分开。 C语言规则运算——$((exp)),exp为符合C语言规则的运算符,表达式 跨进制运算——二进制、八进制、十六进制运算时,输出结果全都自动转化成了十进制。如:echo $((16#5f)) 结果为95 (16进位转十进制) 单中括号[ ]: 字符串比较——==和!= 整数比较——不等于:-gt:大于;-lt :小于;-eq:等于;-ne 数组索引——array[0] 双中括号[[]]: 字符串比较——可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell?

PHP正则表达式语法汇总

谁说我不能喝 提交于 2020-01-13 16:01:21
首先,让我们看看两个特别的字符:'^' 和 ‘$' 他们是分别用来匹配字符串的开始和结束,一下分别举例说明 "^The": 匹配以 "The"开头的字符串; "of despair$": 匹配以 "of despair" 结尾的字符串; "^abc$": 匹配以abc开头和以abc结尾的字符串,实际上是只有abc与之匹配 大理石检测平台 "notice": 匹配包含notice的字符串 你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式( 正则表达式 ) 可以出现在被检验字符串的任何地方,你没有把他锁定到两边 这里还有几个字符 '*', '+',和 '?', 他们用来表示一个字符可以出现的次数或者顺序. 他们分别表示:"zero or more", "one or more", and "zero or one." 这里是一些例子: "ab*": 匹配字符串a和0个或者更多b组成的字符串("a", "ab", "abbb", etc.); "ab+": 和上面一样,但最少有一个b ("ab", "abbb", etc.); "ab?":匹配0个或者一个b; "a?b+$": 匹配以一个或者0个a再加上一个以上的b结尾的字符串. 你也可以在大括号里面限制字符出现的个数,比如 "ab{2}": 匹配一个a后面跟两个b(一个也不能少)("abb" ; "ab{2,}"

《Linux就该这么学》培训笔记_ch08_iptables与firewall防火墙

本秂侑毒 提交于 2020-01-13 12:04:04
《Linux就该这么学》培训笔记_ch08_iptables与firewall防火墙 文章最后会post上书本的笔记照片。 文章主要内容 : 防火墙管理工具 iptables firewalld 服务的访问控制列表 书本笔记 防火墙管理工具 防火墙作为公网与内网之间的保护屏障,在保障数据的安全性方面起着至关重要的作用。 防火墙策略可以 基于流量的源目地址、端口号、协议、应用 等信息来定制,然后防火墙使用预先定制的策略规则监控出入的流量,若流量与某一条策略规则相匹配,则执行相应的处理,反之则丢弃。 在Linux系统中其实存在多个防火墙管理工具,旨在方便运维人员管理Linux系统中的防火墙策略,只需要配置妥当其中的一个就足够。 iptables与firewalld只是用来定义防火墙策略的防火墙管理工具,并不是真正的防火墙。或者说,它们只是一种服务。iptables服务会把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理,而firewalld服务则是把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理。 iptables 在早期的Linux系统中(RHEL7之前),默认使用的是iptables防火墙管理服务来配置防火墙。尽管新型的firewalld防火墙管理服务已经被投入使用多年,但是大量的企业在生产环境中依然出于各种原因而继续使用iptables