Linux 包含一个字符后跟另一个字符的grep行

Linux 包含一个字符后跟另一个字符的grep行,linux,bash,unix,Linux,Bash,Unix,我正在做作业,我被这个问题困住了,我试着在网上和课本上寻找解决方案 问题是: 列出f3.txt文件中包含字符b后不跟字符e的单词的所有行 我知道你可以使用grep-I'b'查找包含字母b的行,但是我如何使它只显示包含b但后面没有字符e的行?这将找到一个不跟“e”的“b”: 或者,如果perl可用,但egrep不可用: $ echo "one be two bring brought" | perl -ne 'print if /b[^e]/;' 如果要查找“b”后面不跟“e”但没有包含“be”

我正在做作业,我被这个问题困住了,我试着在网上和课本上寻找解决方案

问题是:

列出
f3.txt
文件中包含字符
b
后不跟字符
e
的单词的所有行

我知道你可以使用
grep-I'b'
查找包含字母
b
的行,但是我如何使它只显示包含
b
但后面没有字符
e
的行?

这将找到一个不跟“e”的“b”:

或者,如果perl可用,但egrep不可用:

$ echo "one be
two
bring
brought" | perl -ne 'print if /b[^e]/;'
如果要查找“b”后面不跟“e”但没有包含“be”的单词的行(使用\w perl元字符捕获b后面的另一个字符),并避免任何以b结尾的单词:

$ echo "lab
bribe
two
bring
brought" | perl -ne 'print if /b\w/ && ! /be/'
因此,最后的呼吁是:

$ perl -ne 'print if /b\w/ && ! /be/' f3.txt
排除可能存在并破坏练习的“边缘”词,如
lab
bribbe
bob

$ a="one                      
two
lab
bake
bob
aberon
bee
bell
bribe
bright
eee" 

$ echo "$a" |grep -v 'be' |grep 'b.'
bake
bob
bright

您可以选择以下两种解决方案:

grep -ie 'b[^e]' input_file.txt

第一个使用正则表达式:

  • 'b[^e]'
    表示
    b后跟任何非e的符号
  • -i
    忽略大小写,使用此选项,包含
    B
    B
    且不直接后跟
    e
    e
    的行将被接受
第二个解决方案调用grep两次:

  • 第一次查找仅包含b的模式时,请选择这些行
  • 第二个grep使用
    -v
    过滤生成的行,以拒绝包含
    be
  • 两个grep都在使用
    -i
  • 如果
    b
    必须绝对后跟另一个字符,则使用
    b.
    (regex表示
    b
    后跟任何其他字符)否则,如果您还想接受
    b
    后面根本没有任何其他字符的行,您可以在第一次grep调用中使用
    b
    ,而不是
    b.

    grep -ie 'b' input_file.txt | grep -vi 'be'
    
输入:

BEBE
bebe
toto
abc
bobo
abc
bobo
结果:

BEBE
bebe
toto
abc
bobo
abc
bobo

看看这个。我还强烈建议检查此项以更好地理解正则表达式。感谢您的回复,我将检查建议的链接并返回报告。您尝试过我的解决方案吗?不需要使用
egrep
。使用
bribe
这个词进行测试是的,但根据他/她上面所说的,包含b的单词后面没有e。贿赂包含一个不跟“e”的“b”和一个跟“e”的“b”。因为在
贿赂
中,我们有一个
b
后面跟
e
如果我是这家伙的老师,我会要求将
贿赂
排除在结果之外……好的,上面有一点变化,避免贿赂;-)顺便说一下,您的第二个解决方案与我的相同,延迟7分钟。我不清楚
b
后面是否必须跟一个字符,或者是否可以放在行的末尾。不管怎么说,为了一件小事,我不需要偷看你,伙计!:-)我可能输入得太慢了……您的解决方案确实考虑到了这种情况,请尝试
BOB
BEBE
。。。无论如何,我会投赞成票的。要在请求时忽略该情况,我们需要
-i
grep开关。