如何使用grep在两行之间grep文本
我需要grep一些行和两行之间的数据(请不要awk,在这种情况下,页面是不同的,我想自动解析它们): 使用如何使用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-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行的全部文本