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

时间:2017-12-28 22:52:02

标签: linux bash unix

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

问题是:

  

列出b文件中包含字符e后面没有字符grep -i 'b'的字词的所有行。

我知道您可以b找到包含字母b的行,但是我怎样才能使它只显示包含e的行但是后面没有字符{ "Version": "2012-10-17", "Statement": [ { "Sid": "InvokePermission", "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "*" } ] }

3 个答案:

答案 0 :(得分: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 :(得分:1)

排除" edge"可能存在并破坏练习的单词,例如labbribebob

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

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

答案 2 :(得分:-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直接跟随的选项行< / LI>

第二个解决方案调用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