awk匹配以aaa开头,以bbb结尾的内容,同时aaa和bbb之间还包含ccc
如果是匹配以A开头,以B结尾的内容,同时A和B之间还包含C的这种怎么做?
比如
[root@localhost ~]#cat file
aaa
grge
ddd
bbb aaa gege
ccc
bbb aaa gregeg
eee
bbb
这个中A=aaa,B=bbb,C=ccc,那么要提取出下面的……
aaa gege
ccc
bbb
[root@localhost ~]#awk '/aaa/{t=1}{if(t)s=length(s)?s"\n"$0:$0}/bbb/{t=0;if(s~/ccc/)print s;s=""}' file
第一行
pattern1{action1}
匹配包含aaa的行,满足条件令t=1,当t=1时,if条件为真,执行s=length(s)?s"\n"$0:$0
这里s=length(s)?s"\n"$0:$0先赋值再判断
length(s)为真,执行s"\n"$0;s=s"\n"$0,将$0添加到s的下一行
length(s)为假,执行$0
man awk中length函数的解释
length([s]) Return the length of the string s, or the length of $0 if s is not supplied.
length(s)=length($0),即length(aaa)=3,表达式为真,此时执行第1个表达式 s"\n"$0
[root@localhost ~]#echo "aaa" | awk '{s=length(s)?s"\n"$0:$0}END{print s}'
aaa
[root@localhost ~]#echo "aaa" | awk '{s=length(s)}END{print s}'
0
pattern2{action2}
匹配包含bbb的行
s为从aaa开始的字符串
判断字符串中是否包含ccc(正则表达式)
满足条件,则打印s
不满足将s变量置空
第二行
不匹配aaa,由于第一行不满足bbb,所以t=1;
执行{if(t)s=length(s)?s"\n"$0:$0}
s值累加,继续将$0添加到s的下一行
不匹配bbb,执行下一行
第三行
不匹配aaa,继续将$0添加到s的下一行
不匹配bbb,执行下一行
第四行
不匹配aaa,继续将$0添加到s的下一行
匹配bbb,执行{t=0;if(s~/ccc/)print s;s=""}
将t置0,执行正则匹配,s是否包含ccc
满足条件,打印s
不满足条件,将s置空
一个循环结束(或者一个流程结束,若不满足条件则无法完成,后面的代码也就失去意义了)
改进:
length函数可以不用
awk '/aaa/{t=1}{if(t)s=s?s"\n"$0:$0}/bbb/{t=0;if(s~/ccc/)print s;s=""}' file
多种思路,感谢CU大神
awk '/^aaa/{t=1};/^bbb/{if(s~/ccc/){print s"\n"$0};s=a;t=0}t{s=s?s"\n"$0:$0}' file
awk '/^aaa/{s=$0;next};/^bbb/{if(s~/ccc/)print s"\n"$0;next}{s=s"\n"$0}' file
awk匹配以aaa开头,以bbb结尾的内容,同时aaa和bbb之间还包含ccc的更多相关文章
- php正则匹配以“abc”开头且不能以“xyz”结尾的字符串
本文介绍下,用php正则区配以"abc"开头的,且不能以"xyz"结尾的字符串的方法,有需要的朋友参考下. 要求:用php正则表达式匹配以“abc”开头,但结尾 ...
- “.”开头,以"}"结尾,中间是任意字符的正则
"."开头,以"}"结尾,中间是任意字符的正则 /^\..+\{$/
- 正则表达式,匹配非本站图片网址去掉img标签内容实例
正则表达式,匹配非本站图片网址去掉img标签内容实例 在线正则表达式测试http://tool.oschina.net/regex/# 测试内容: <div><p>eee< ...
- awk匹配
输出匹配funcno或type:awk 'funcno|type' 输出两次正则表达式匹配之间的行:awk '/funcno/, /type/' 删除所有的空行:awk NF 从第8行输出到第12行: ...
- awk处理之案例二:awk匹配文本
编译环境 本系列文章所提供的算法均在以下环境下编译通过. [脚本编译环境]Federa 8,linux 2.6.35.6-45.fc14.i686 [处理器] Intel(R) Core(TM)2 Q ...
- awk匹配某一段内容,打印第一段
要求: awk 文本在文本中搜索abc搜到后再从搜到的那一行开始一直输出后面的行,直到某一行含有bcd就停止 测试文本: [root@localhost]# cat awktest sadfj sdj ...
- [Swift]LeetCode984. 不含 AAA 或 BBB 的字符串 | String Without AAA or BBB
Given two integers A and B, return any string S such that: S has length A + B and contains exactly A ...
- 正则,以“this.Name”开头,以“;”结尾
string regex="this\\.Name(.*?);"; string regex="this\\.Name(.*?);"; 以size开头,以数字结 ...
- awk处理之案例五:awk匹配字段2包含字段1的文本
编译环境 本系列文章所提供的算法均在以下环境下编译通过. [脚本编译环境]Federa 8,linux 2.6.35.6-45.fc14.i686 [处理器] Intel(R) Core(TM)2 Q ...
随机推荐
- 数据结构-栈 C和C++的实现
在数据结构中,栈是一种桶状结构,每次往桶里放数据,最后放的数据最先被拿出来,最先放进去的数据最后才能出来(FILO) C语言: 一.文件清单: MyStack.h: #ifndef _MYSTACK_ ...
- IdentityServer(14)- 使用EntityFramework Core配置和操作数据
IdentityServer具有良好的扩展性,其中一个可扩展点是用于IdentityServer所需数据的存储机制. 本快速入门介绍了如何配置IdentityServer以使用EntityFramew ...
- XOR算法的原理和实现
XOR算法的原理和实现 XOR算法这种方法的原理 当一个数A和另一个数B进行异或运算会生成另一个数C,如果再将C和B进行异或运算则C又会还原为A. 相对于其他的简易加密算法,XOR算法的优点如下. ( ...
- 关于int *a[常量]与int (*a)[常量]的分析与区分(详解)
前言: 小伙伴私信我说,int *a[常量]与int (*a)[常量]这个区分不开,C指针,确实是C中最难的部分,也是学C++,JAVA,包括你以后上岗用的非常频繁的东西,在这里我就简单论述一下吧,具 ...
- Gym 100952E&&2015 HIAST Collegiate Programming Contest E. Arrange Teams【DFS+剪枝】
E. Arrange Teams time limit per test:2 seconds memory limit per test:64 megabytes input:standard inp ...
- c++(排序二叉树)
前面我们讲过双向链表的数据结构.每一个循环节点有两个指针,一个指向前面一个节点,一个指向后继节点,这样所有的节点像一颗颗珍珠一样被一根线穿在了一起.然而今天我们讨论的数据结构却有一点不同,它有三个节点 ...
- PHPStorm+PHPStudy新建第一个PHP项目
img { max-width: 100% } 熟悉了.net的编程,偶尔也来客串一下PHP.前几天闲来无事随便加了一个PHP的开发群,入群之后傻眼了,群里有大小各位程工1600多人,所以决定学习一下 ...
- 如何为图片添加热点链接?(map + area)
所谓图片热点链接就是为图片指定一个或多个区域以实现点击跳转到指定的页面.简单来说就是点击某一区域就能跳转到相应的页面,而无需点击整个图片才能跳转. 说到图片热点链接,我首先想到了map + area, ...
- 基于逆波兰式的JAVA计算器
请看下方↓↓
- vuethink 在本地没问题,在服务器报错 , php5.6与php5.5之间的大坑
将环境换为php5.6即可