繁体   English   中英

同时使用两个正则表达式

[英]greping two regex at the same time

如何使用grep同时搜索两个正则表达式。 说,我正在像这样的文本中查找“我的名字是”和“我的银行帐户”:

My name is Mike. I'm 16 years old.
I have no clue how to solve my grep problem,but
if I manage to solve it, then I'll transfer 
you some money from my bank account. 

我希望grep返回:

我的名字是我的银行帐户

是否可以仅通过一个grep调用来完成此操作,还是应该编写一个脚本来为我执行此操作?

管。 grep expr1 file | grep expr2

用于egrep '(expr1|expr2)' file

我不太确定你要干什么。 您给出的结果似乎不适合grep可以/不会做的任何事情。 特别地,grep是面向行的,因此,如果在一行中找到匹配项,它将在输出中包含整行。 假设这是你真正想要的,你可以直接or两种模式一起:

grep ("My name is" | "my bank account")

鉴于以上输入,应产生:

My name is Mike. I'm 16 years old.
you some money from my bank account. 

另外,由于您的模式中未包含任何元字符,因此可以使用fgrep(或grep -F)并将模式放在文件中,每行一个。 对于两种模式,这可能并没有太大的区别,但是如果您要查找很多模式,则可能会快很多(它使用Aho-Corasick字符串搜索来一次搜索所有模式而不是一次搜索一个)。

另一种可能是您要查找包含my name ismy bank account一行。 这就是@djechlin的答案。 从上面的输入中,将不会产生任何输出,因此我怀疑这就是您想要的,但是如果是这样,他的答案是相当合理的。 另一种可能是类似("My name is.*my bank account" | "my bank account.*My name is")

是。 有可能的。 我用sed。 您可以用任何您想要的替换S1和S2

sed '/S1/{ s:.*:S1:;H};/S2/{ s:.*:S2:;H};${x;s:\n: :g;p};d' 

Sed比grep复杂得多,在这种情况下,我使用它来模拟您希望的grep行为。

如果您不关心尾随换行符,只需使用grep

< file.txt grep -o "My name is\|my bank account" | tr '\n' ' '

如果您希望尾随换行符,请使用awk

awk -v RS="My name is|my bank account" 'RT != "" { printf "%s ", RT } END { printf "\n" }' file.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM