当前位置: 首页 > 知识库问答 >
问题:

通过只对第一个模式执行精确匹配来提取两个模式之间的线

刘弘济
2023-03-14
awk "/pattern1/{flag=1;next}/pattern2/{flag=0}flag" filename

验证一行中是否存在“Pattern1”,并从该行开始打印,直到找到字符串“Pattern2”存在的后续行。

我想做的是将字符串“pattern1”与awk开始打印的行精确匹配,并通过验证行中是否存在“pattern2”来检测awk停止打印的行(没有精确匹配)。因此,基本上,我希望对第一个模式进行精确匹配,并对第二个模式保留上面命令的匹配行为。

共有1个答案

东郭海阳
2023-03-14

awk具有如下构建功能:

$ cat data 
abcd
pattern1
xyz
pattern2
abcde
$ awk '/pattern1/,/pattern2/' data
pattern1
xyz
pattern2

sed也有:

$ sed -n '/pattern1/,/pattern2/p' data
pattern1
xyz
pattern2

Edit:为此,您必须使用某种锚定,在gawk中使用单词边界\y或开始和结束锚定,如下所示:

$ cat data 
abcd
pattern1 234
pattern1
xyz
pattern2
abcde
$ awk '/^pattern1$/,/pattern2/' data 
pattern1
xyz
pattern2
$ awk '/^pattern1$/{flag=1} /pattern2/{flag=0}flag' data 
pattern1
xyz
$ awk '/^pattern1$/{flag=1;next} /pattern2/{flag=0}flag' data 
xyz
$ awk '/^pattern1$/{flag=1;next;} /pattern2/{flag=0;print}flag' data 
xyz
pattern2
 类似资料:
  • 问题内容: 我需要从一个巨大的文件中提取两个匹配模式之间的特定行。 假设(文件中唯一)匹配特定内容, (文件中不唯一)匹配之后的下一个立即匹配项。然后我要提取之间的所有行,包括 样本文件内容 期望的输出 如果您能帮助我解决这个问题,将不胜感激 问题答案: 这可以是一种方法: 找到时,则使变量p = 1。 它仅在时打印行。这是通过条件完成的。如果为true,它将执行默认的awk操作,即。否则,事实并

  • 有人知道在bash中如何在包含txt文件和子目录(我也必须搜索)的目录中搜索模式a,然后在匹配模式a的文件上打印匹配模式B的结果吗?

  • 一、简介 模式指在字符串中寻找的特定序列的字符,由反斜线包含:/def/即模式def。其用法如结合函数split将字符串用某模式分成多个单词:@array = split(/ /, $line); 二、匹配操作符 =~、!~ =~检验匹配是否成功:$result = $var =~ /abc/;若在该字符串中找到了该模式,则返回非零值,即true,不匹配则返回0,即false。!~则相反。 这两个

  • Perl 内置的模式匹配让你能够简便高效地搜索大量的数据。不管你是在一个巨型的商业门户站点上用于扫描每日感兴趣的珍闻报道,还是在一个政府组织里用于精确地描述人口统计(或者人类基因组图),或是在一个教育组织里用于在你的 web 站点上生成一些动态信息,Perl 都是你可选的工具。这里的一部分原因是 Perl 的数据库联接能力,但是更重要的原因是 Perl 的模式匹配能力。如果你把“文本”的含义尽可能

  • 模式,是Rust另一个强大的特性。它可以被用在let和match表达式里面。相信大家应该还记得我们在复合类型中提到的关于在let表达式中解构元组的例子,实际上这就是一个模式。 let tup = (0u8, 1u8); let (x, y) = tup; 而且我们需要知道的是,如果一个模式中出现了和当前作用域中已存在的同名的绑定,那么它会覆盖掉外部的绑定。比如: let x = 1; let c

  • 问题内容: 我正在尝试匹配模式: 以下仅匹配第一次出现的情况: 结果是: 但是,[使用pythex似乎可以正常工作](http://pythex.org/?regex=%3C–(%5B%5Cw%5Cs%5D%2B)–%3E(%5B%5Cs%5CS%5D*%3F)(%3F%3D%5Cn%3C–%7C%24)&test_string=%3C–%20Option%201%20–%3E%0ANice%20