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