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

问题描述 投票:-6回答:3

我正在完成我的任务,我一直坚持这个问题,我已经尝试在线寻找解决方案和我的教科书。

问题是:

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

我知道你可以做grep -i 'b'来找到包含字母b的行,但是我怎样才能使它只显示包含b但没有后跟字符e的行?

linux bash unix
3个回答
-1
投票

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

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

要么

grep -ie 'b.' input_file.txt | grep -vi 'be'

第一个使用正则表达式:

  • 'b[^e]'意味着b followed by any symbol that is not e
  • -i是忽略大小写,这个选项包含Bb的行不会直接被eE所接受

第二个解决方案调用grep两次:

  • 第一次查找包含b的模式时,只选择这些行
  • 使用-v通过第二个grep过滤生成的行以拒绝包含be的行
  • 两个grep都使用-i忽略了这个案例
  • 如果b必须绝对跟随另一个字符然后使用b.(正则表达式意思是b后跟任何其他字符)否则如果你还想接受b后面没有任何其他字符的行你可以在第一个grep中使用b打电话而不是b.grep -ie 'b' input_file.txt | grep -vi 'be'

输入:

BEBE
bebe
toto
abc
bobo

结果:

abc
bobo

2
投票

这将找到一个“b”,后面没有“e”:

$ echo "one be
two
bring
brought" | egrep 'b[^e]'

或者如果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

1
投票

排除可能存在的“边缘”词并打破练习,如labbribebob

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

$ echo "$a" |grep -v 'be' |grep 'b.'
bake
bob
bright
© www.soinside.com 2019 - 2024. All rights reserved.