我有以下数据,我的意思是仅提取那些仅包含“bb”的行。不是“b”或“bbb”或其他任何东西,只是“bb”。
abb
abbb
aabbcc
aabab
abbbbc
现在,当我使用以下命令组合时:
cat file1 | grep "bb[^b]
我得到的输出是示例文件中的所有行:
abb
abbb
aabbcc
aabab
abbbbc
我想要的预期是 -:(仅包含“bb”的行)
abb
aabbcc
可以实现此目的的正则表达式是什么?
阿巴布无效。我正在寻找仅包含的行BB并且没有其他模式乙。该行将仅包含两个连续的乙并且根本没有其他 b 字符。
答案1
我想最直接的方法是:
grep '^[^b]*bb[^b]*$' file1
顺便说一句,对于这样的命令grep
接受文件名参数,这样做效率更高
grep '^[^b]*bb[^b]*$' file1
或者
grep '^[^b]*bb[^b]*$' < file1
(如果不支持文件参数,后者也可以工作)
比
cat file1 | grep '^[^b]*bb[^b]*$'
而且往往更加灵活。
答案2
grep '\(^\|[^b]\)bb\([^b]\|$\)'
或者
grep -E '(^|[^b])bb([^b]|$)'
即:搜索bb
前面是行首或不同于 的字符b
,后面是不同于b
行尾的字符的出现。