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

从文件中提取两个模式之间的行

唐哲
2023-03-14
问题内容

我需要从一个巨大的文件中提取两个匹配模式之间的特定行。

假设pattern1(文件中唯一)匹配特定内容line # npattern2文件中不唯一)匹配之后的line # m下一个立即匹配项line # n。然后我要提取之间的所有行,包括line #n to #m

样本文件内容

***************************************************************************
text line # n-2
text line # n-1
********************************* Results *********************************
SUCCEEDED
...
...
some text
***************************************************************************
text line # m+1
text line # m+2
***************************************************************************

期望的输出

********************************* Results *********************************
SUCCEEDED
...
...
some text
***************************************************************************

如果您能帮助我解决这个问题,将不胜感激


问题答案:

这可以是一种方法:

$ awk '/pattern1/ {p=1}; p; /pattern2/ {p=0}' file
********************************* Results *********************************
SUCCEEDED
...
...
some text
***************************************************************************
  • 找到时pattern1,则使变量p = 1。
  • 它仅在时打印行p==1。这是通过p条件完成的。如果为true,它将执行默认的awk操作,即print $0。否则,事实并非如此。
  • 找到时pattern2,则使变量p = 0。由于先后检查此条件p,它将打印pattern2第一次出现的行。

如果要精确匹配行:

$ awk '$0=="pattern1" {p=1}; p; $0=="pattern2" {p=0}' file

测试

$ cat a
***************************************************************************
text line # n-2
pattern1
********************************* Results *********************************
SUCCEEDED
...
...
some text
***************************************************************************
pattern2
text line # m+2
pattern2
***************************************************************************
$ awk '/pattern1/ {p=1}; p; /pattern2/ {p=0}' a
pattern1
********************************* Results *********************************
SUCCEEDED
...
...
some text
***************************************************************************
pattern2


 类似资料:
  • 问题内容: 我有以下格式的文本文件: 我想提取.txt文件中DELIMITER1和DELIMITER2之间的每个s块 这是我当前的无效代码: 有任何想法吗? 问题答案: 您可以使用简化这一个正则表达式中,DOTALL标志。 这也利用了非贪婪运算符,因此将找到多个DELIMITER1-DELIMITER2对的非重叠块。

  • 问题内容: 如何从中提取字符串并使用模式匹配或其他方法。例如,如果文本是` “您好(Java)” 然后如何获得。 谢谢。 问题答案: 试试这个: 要么

  • 问题内容: 可以说我有一个包含以下内容的文本文件 现在,我需要编写一个Python代码,该代码将读取文本文件并将内容在“开始”和“结束”之间复制到另一个文件。 我写了下面的代码。 我没有获得预期的期望输出,只是开始了。我想要得到的是开始和结束之间的所有界限。不包括开始和结束。 问题答案: 万一您的文本文件中有多个“开始”和“结束”,这会将所有数据一起导入,不包括所有“开始”和“结束”。

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

  • 我必须用下面的长字符串。如何提取介于“url=”和“,”之间的所有值,以便获得以下数组? 我尝试了以下方法,但它只给我第一次出现,但我需要它们。谢谢!

  • 请让我知道这里出了什么问题。需要找出HH:MM:SS格式的不同之处。