Bash:我如何为同一个字符串的多个实例grep一行?

Bub*_*ter 9 regex bash grep

我有几行看起来像这样:

aaaaaaaaxzaaaaaaaaaaaaaa
bbbbbbbbbbbbxzbbbbbbxzbb
ccxzcccccccccccccccccxzc
dddddddxzddddddddddddddd
Run Code Online (Sandbox Code Playgroud)

在其中两行中,有两个xz字符实例.我希望grep xz在同一行中查找两次并输出它匹配的行.如果xz出现一次,我不想知道.

运行以下内容:

cat lines | grep "xz"
Run Code Online (Sandbox Code Playgroud)

用xz告诉我每一行,但我只想看到xz出现两次的行.

如何使模式搜索在同一行中重复?

Wik*_*żew 11

您可以使用

cat lines | grep 'xz.*xz'
Run Code Online (Sandbox Code Playgroud)

要不就

grep 'xz.*xz' lines
Run Code Online (Sandbox Code Playgroud)

.*将匹配可选字符2之间(但任何一个新行)xz.

如果您需要使用环视,则需要-P切换以启用类似Perl的regexp.


Ken*_*ent 5

awk是一种解决方法:

awk -F'xz' 'NF==3' file
Run Code Online (Sandbox Code Playgroud)

要么

awk 'gsub(/xz/,"")==2' file
Run Code Online (Sandbox Code Playgroud)

另一个好处AWK带给你的,更容易检查的模式匹配less then n timesexact n timesgreater than n times。你只要改变==<, <=, >, >=