首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用grep选择多个模式

使用grep选择多个模式
EN

Stack Overflow用户
提问于 2020-08-14 05:09:18
回答 3查看 127关注 0票数 0

我有一个类似这样的文件:

代码语言:javascript
运行
复制
t # 3-7, 1
v 0 104
v 1 92
v 2 95
u 0 1 2
u 0 2 2
u 1 2 2
t # 3-8, 1
v 0 94
v 1 13
v 2 19
v 3 5
u 0 1 2
u 0 2 2
u 0 3 2
t # 3-9, 1
v 0 94
v 1 13
v 2 19
v 3 7
u 0 1 2
u 0 2 2
u 0 3 2

T对应于每个块的报头。

我想从文件中提取多个模式,并输出包含所需模式的事务。

我尝试了以下代码:

代码语言:javascript
运行
复制
ps | grep -e 't\|u 0 1 2' file.txt 

它可以很好地提取报头和模式'u 0 1 2‘。但是,当我再添加一个模式时,输出列表只显示以t #开头的头部。我修改后的代码看起来像这样:

代码语言:javascript
运行
复制
ps | grep -e 't\|u 0 1 2 && u 0 2 2' file.txt 

我尝试了sed和awk解决方案,但它们对我也不起作用。

谢谢你的帮助!奥拉

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-08-14 05:17:55

在第三个选项之前使用|作为分隔符,就像第二个选项一样。

代码语言:javascript
运行
复制
grep -E 't|u 0 1 2|u 0 2 2' file.txt

此外,指定文件名并通过管道将ps传递给grep也是没有意义的。如果您提供文件名参数,它不会从管道读取(除非您使用-作为文件名)。

票数 1
EN

Stack Overflow用户

发布于 2020-08-14 05:14:16

可以将grep与多个-e表达式一起使用,以便一次执行多个grep操作:

代码语言:javascript
运行
复制
$ printf '%d\n' {0..10} | grep -e '0' -e '5'
0
5
10
票数 1
EN

Stack Overflow用户

发布于 2020-08-14 05:54:15

@kojiro's answer上扩展,你会想要use an array to collect arguments

代码语言:javascript
运行
复制
mapfile -t lines < file.txt
for line in "${lines[@]}"
do
    arguments+=(-e "$line")
done

grep "${arguments[@]}"

您可能需要在循环中使用一个条件来检查该行是否是您想要搜索的行,但仅此而已。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63403230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档