当前位置: 首页 > 面试题库 >

awk:显示匹配的正则表达式(多行)

越正阳
2023-03-14
问题内容

我有一个看起来像这样的文件:

SF:/home/developer/project/test/resources/somefile.js
DA:1,2
DA:3,2
end_of_record
SF:/home/developer/project/src/resources/otherfile.js
DA:9,2
DA:15,2
DA:22,2
end_of_record

...some more SF:/home/xxx and end_of_record lines...

该文件包含以开头SF: ...和结尾的块end_of_record。请注意,(DA:x,x)之间的行数可以不同。我想在第一行中打印所有带有字符串
test”的块(例如此处的“ SF:/ home / developer / test / resources /
…”)。对于此示例,我想要的输出将是:

SF:/home/developer/project/test/resources/somefile.js
DA:1,2
DA:3,2
end_of_record

我想在 Linux 环境中执行此操作。

我的第一个尝试是使用“ sed”命令执行此操作,但是经过一些研究,似乎“ awk”是执行多行操作的更合适工具。

使用awk和Regex,这是我到目前为止的命令:

awk '/SF[:\/a-zA-Z0-9]*test[\/A-Za-z0-9.,:\n]*end_of_record/ {print}' FS="\n" RS="" examplefile

但是它输出完整的examplefile,不仅输出第一行中包含“
test”的块。我不确定我的正则表达式是否错误,或者我是否在awk通话中遗漏了一些东西。

我如何只获得第一行中带有“ test”的块?


问题答案:

您需要一个标志:

awk '/^SF.*test.*/{f=1}f;/end_of_record/{f=0}' yourFile


 类似资料:
  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。

  • 我们得到了一些这样的内容:

  • 给定下面的字符串 [NeMo(PROD)]10.10.100.100(EFA-B-3)[博科FC-Switch]传感器:电源#1(SNMP自定义表)关闭(无此名称(SNMP错误#2)) 我尝试获取多个匹配项以提取以下值: 因为我是正则表达式的初学者,所以我试图定义一些“规则”: 提取第一个圆括号内的第一个值,例如PROD 提取第一个闭合方括号和第二个开口圆括号之间的值,例如10.10.100.10

  • 主要内容:基本模式匹配,字符簇,确定重复出现基本模式匹配 一切从最基本的开始。模式,是正则表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如: 这个模式包含一个特殊的字符 ^,表示该模式只匹配那些以 once 开头的字符串。例如该模式与字符串 "once upon a time" 匹配,与 "There once was

  • 问题内容: 当字符串以数字开头时,我需要匹配,然后是一个点,然后是一个空格和1个或多个大写字符。匹配必须发生在字符串的开头。我有以下字符串。 我尝试过的正则表达式是: 它不匹配。一个有效的正则表达式将对这个问题有什么作用? 问题答案: (对不起,我先前的错误。大脑现在坚定地投入了。嗯,也许。) 这有效: 分解: =字符串开头 =一个或多个数字 (之所以转义,是因为它在字符串中,因此) =文字(或者

  • 问题内容: 我从以下格式的文件中获取输入: 现在,我想在我的Java代码中读取int1,int2,int3和int4。我该如何在Java中使用正则表达式匹配。谢谢。 问题答案: 为了避免空值: