次のデータがあります。 「bb」のみを含む行だけを抽出したいのです。 「b」や「bbb」ではなく、単に「bb」です。
abb
abbb
aabbcc
aabab
abbbbc
次のコマンドの組み合わせを使用するとき:
cat file1 | grep "bb[^b]
私が得る出力はサンプルファイルのすべての行です。
abb
abbb
aabbcc
aabab
abbbbc
私が望む期待は -:("bb" を含む行のみ) です。
abb
aabbcc
これを達成できる正規表現は何ですか?
アバブ無効です。以下を含む行のみを探しています。BBそして他のモードはありません。第二。行には2つの連続した内容のみが含まれています。第二そして他の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
行の終わりと他の文字が後に続く文字を検索します。