-grep を使用して 'bar' で始まり 'i' または 'n' で終わる 6 文字の単語数を計算します。

-grep を使用して 'bar' で始まり 'i' または 'n' で終わる 6 文字の単語数を計算します。

「bar」で始まり、「i」または「n」で終わる6文字の単語の数を数えたいです。

たとえば、次のファイルが提供されます。

barxxi
barxxc
barxxn
barqwq
barovo

次の行が一致するため、出力は2(整数)でなければなりません。

barxxi
barxxn

私のコードは次のとおりですが、間違っているようです。

grep -c 'bar??[ni]' /path/file.txt

答え1

grep -o必要に応じて、一致するテキストのみを1行に複数回出力するには、このオプションを使用します。

grep -o '\<bar[^ ][^ ][ni]\>' /path/file.txt | wc -w

単語の始まりと終わりを\<一致させます。空白以外の文字と\>一致します。[^ ]

答え2

疑問符を?ピリオドに置き換えると、.入力に1行に単語が1つしかない限り、grepが機能します。

grep -c 'bar..[ni]' /path/file.txt

答え3

awk '{ for (i=1;i<=NF;i++) if ($i ~ /^bar.*[in]/ || $i ~ /[[:space:]]bar.*[in]/) { count++ }} END { print count }' filename

上記のawkソリューションも動作します。各行の複数の項目を考慮してパターンが〜を含む正規表現と一致すると、awkはファイルの各行でスペースで区切られた最初の項目から最後の項目(NF)まで見つけ、それに応じて数を増やします。行の先頭(^)と、バー、スペース、バーを考慮する2つのifステートメントを作成します。最後に、カウントが画面に印刷されます。

関連情報