[英]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 is
和my 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.