簡體   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