如何使用grep在两行之间grep文本

如何使用grep在两行之间grep文本,grep,Grep,我需要grep一些行和两行之间的数据(请不要awk,在这种情况下,页面是不同的,我想自动解析它们): 使用grep-o-a-E“Date | Owner | Login”我可以grep 3个第一行,但是如何在管道中的两行之间grep数据呢 尝试过这个,但没有结果 grep -o -a -E 'Date|Owner|Login' | grep -A6 data-begin | 编辑: Date:20.09.18 Owner:Dave Login: 123 some useless text t

我需要grep一些行和两行之间的数据(请不要awk,在这种情况下,页面是不同的,我想自动解析它们):

使用
grep-o-a-E“Date | Owner | Login”
我可以grep 3个第一行,但是如何在管道中的两行之间grep数据呢

尝试过这个,但没有结果

grep -o -a -E 'Date|Owner|Login' | grep -A6 data-begin |
编辑:

Date:20.09.18
Owner:Dave
Login: 123

some useless text that is not needed

data-begin
 some text
 some text
 some text
 some text
 some text
data-end

如何抓取中间没有文本的文本?

如果您可以使用
sed
,请尝试以下内容

sed -E -n '/Date|Owner|Login/p;/data-begin/,+6p' Input_file
sed -E -n '/Date|Owner|Login/{s/:.*//p};/data-begin/,+6p'  Input_file
或者,如果您只想在
之前获取值:
我可以从您的尝试中看到的内容,请尝试以下
sed

sed -E -n '/Date|Owner|Login/p;/data-begin/,+6p' Input_file
sed -E -n '/Date|Owner|Login/{s/:.*//p};/data-begin/,+6p'  Input_file
输出如下

Date
Owner
Login
data-begin
 some text
 some text
 some text
 some text
 some text
data-end


现在,部分原因是您的尝试不起作用,因为您正在将第一个
grep
的输出发送到第二个
grep
,在那里它找不到任何类似
data begin
的字符串,因此它不会打印任何内容


编辑:根据OP的评论,所需输出已更改,因此现在添加此输出

sed -E -n '/Date|Owner|Login/{s/.*://p};/data-begin/,+6p'  Input_file

如果您可以使用
sed
,请尝试以下内容

sed -E -n '/Date|Owner|Login/p;/data-begin/,+6p' Input_file
sed -E -n '/Date|Owner|Login/{s/:.*//p};/data-begin/,+6p'  Input_file
或者,如果您只想在
之前获取值:
我可以从您的尝试中看到的内容,请尝试以下
sed

sed -E -n '/Date|Owner|Login/p;/data-begin/,+6p' Input_file
sed -E -n '/Date|Owner|Login/{s/:.*//p};/data-begin/,+6p'  Input_file
输出如下

Date
Owner
Login
data-begin
 some text
 some text
 some text
 some text
 some text
data-end


现在,部分原因是您的尝试不起作用,因为您正在将第一个
grep
的输出发送到第二个
grep
,在那里它找不到任何类似
data begin
的字符串,因此它不会打印任何内容


编辑:根据OP的评论,所需输出已更改,因此现在添加此输出

sed -E -n '/Date|Owner|Login/{s/.*://p};/data-begin/,+6p'  Input_file

如果我理解正确,您希望在“登录:”之后和“数据开始”之前丢弃管道(?)中仅使用
grep
的一些不需要的东西。如果是这样,这似乎符合要求:

{ grep -B999 "^Login:" file; grep -A999 "^data-begin" file; } | next_command
输出

Date:20.09.18
Owner:Dave
Login: 123
data-begin
 some text
 some text
 some text
 some text
 some text
data-end

如果我理解正确,您希望在“登录:”之后和“数据开始”之前丢弃管道(?)中仅使用
grep
的一些不需要的东西。如果是这样,这似乎符合要求:

{ grep -B999 "^Login:" file; grep -A999 "^data-begin" file; } | next_command
输出

Date:20.09.18
Owner:Dave
Login: 123
data-begin
 some text
 some text
 some text
 some text
 some text
data-end

欢迎来到SO。使用
您正在对
grep-o-a-E'Date | Owner | Login'
的输出应用grep,它不包含
数据begin
,对吧?我认为grep可能太简单了。如果是yaml,您可能有机会获得yq(jq克隆)是的,您是对的,数据开始应该在第一个grep中写入,但它只以这种方式greps行,而不是使用您的命令。你到底想达到什么目的?结果如何?欢迎来到SO。使用
您正在对
grep-o-a-E'Date | Owner | Login'
的输出应用grep,它不包含
数据begin
,对吧?我认为grep可能太简单了。如果是yaml,您可能有机会获得yq(jq克隆)是的,您是对的,数据开始应该在第一个grep中写入,但它只以这种方式greps行,而不是使用您的命令。你到底想达到什么目的?结果如何?是的,谢谢,它回答了问题。但有可能不在登录和数据开始之间获取数据吗?此sed在lines@Jennifer,我不这样认为,它正在接受它,请查看我在我的帖子中的编辑,我现在发布了我现在得到的输出,让我知道。是的,它应该是这样的,但不是数据|所有者|登录我尝试了日期。*数据开始/p/数据开始/,+6p'并解析it@Jennifer,ok试试
sed-E-n'/Date | Owner | Login/{s/*://p}/数据开始/,+6p'输入_文件
一次,然后让我知道?在最后一个命令之后,我将从文件中获取完整文本,从乞讨到数据开始后的第6行是的,谢谢,它回答了问题。但有可能不在登录和数据开始之间获取数据吗?此sed在lines@Jennifer,我不这样认为,它正在接受它,请查看我在我的帖子中的编辑,我现在发布了我现在得到的输出,让我知道。是的,它应该是这样的,但不是数据|所有者|登录我尝试了日期。*数据开始/p/数据开始/,+6p'并解析it@Jennifer,ok试试
sed-E-n'/Date | Owner | Login/{s/*://p}/数据开始/,+6p'输入_文件
一次,并让我知道?在最后一个命令之后,我将从文件中获取从begging到数据开始后第6行的全部文本