[英]Bash: How can I grep a line for multiple instances of the same string?
我有幾行看起來像這樣:
aaaaaaaaxzaaaaaaaaaaaaaa
bbbbbbbbbbbbxzbbbbbbxzbb
ccxzcccccccccccccccccxzc
dddddddxzddddddddddddddd
在其中兩行中,有兩個 xz
字符實例。 我希望grep在同一行中查找xz
兩次並輸出它匹配的行。 如果xz
出現一次,我不想知道。
運行以下內容:
cat lines | grep "xz"
用xz告訴我每一行,但我只想看到xz出現兩次的行。
如何使模式搜索在同一行中重復?
您可以使用
cat lines | grep 'xz.*xz'
要不就
grep 'xz.*xz' lines
.*
將匹配2 xz
之間的可選字符(除了換行符之外的任何字符)。
如果你需要使用環視,你需要-P
開關來啟用類似Perl的regexp。
awk是一種方法:
awk -F'xz' 'NF==3' file
要么
awk 'gsub(/xz/,"")==2' file
awk帶給你的另一個好處是,更容易檢查匹配less then n times
, exact n times
或greater than n times
。 你只需將==
改為<, <=, >, >=
如果要完整輸出匹配的行,則不需要選項
grep 'xz.*xz' filename
會做
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.