我正在完成我的任务,我一直坚持这个问题,我已经尝试在线寻找解决方案和我的教科书。
问题是:
列出
f3.txt
文件中包含字符b
后面没有字符e
的单词的所有行。
我知道你可以做grep -i 'b'
来找到包含字母b
的行,但是我怎样才能使它只显示包含b
但没有后跟字符e
的行?
您可以选择以下两种解决方案:
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
是忽略大小写,这个选项包含B
或b
的行不会直接被e
或E
所接受第二个解决方案调用grep两次:
-v
通过第二个grep过滤生成的行以拒绝包含be
的行-i
忽略了这个案例b
必须绝对跟随另一个字符然后使用b.
(正则表达式意思是b
后跟任何其他字符)否则如果你还想接受b
后面没有任何其他字符的行你可以在第一个grep中使用b
打电话而不是b.
。
grep -ie 'b' input_file.txt | grep -vi 'be'
输入:
BEBE
bebe
toto
abc
bobo
结果:
abc
bobo
这将找到一个“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
排除可能存在的“边缘”词并打破练习,如lab
,bribe
和bob
:
$ a="one
two
lab
bake
bob
aberon
bee
bell
bribe
bright
eee"
$ echo "$a" |grep -v 'be' |grep 'b.'
bake
bob
bright