本文中の質問
1
で始まる行を選択 とスペースが続きます
grep -c '^1\s' file
grep -c '^1[[:space:]]' file
これにより、行数も表示されます (wc を呼び出す必要はありません)
タイトルの質問
1
しない その後に別の数字が続く (または何もない):
grep -cE '^1([^0-9]|$)' file
しかし、上記の両方のソリューションには興味深い問題があります。読み続けてください。
質問の本文で、ユーザーはファイルが「タブ区切り」であると主張しています。
区切り文字
タブ
1
で始まる行 その後にタブ (コマンド内の実際のタブ) が続きます。区切り文字がスペース (またはその他、またはなし) の場合、これは失敗します:
grep '^1 ' file
スペース
1
で始まる行 その後にスペース (コマンド内の実際のスペース) が続きます。区切り文字がその他またはなしの場合、これは失敗します。:
grep '^1 ' file
タブまたはスペース
grep '^1( | )' file
grep '^1[[:blank:]]' file
空白
より柔軟なオプションは、複数のスペース (水平および垂直) 文字を含めることです。 [:space:]
文字クラス セットは で構成されます (スペース)、
\t
(水平タブ)、\r
(キャリッジリターン),\n
(改行)、\v
(垂直タブ) と \f
(用紙送り)。ただし、grep は改行に一致させることはできません (これは -z
でのみ回避できる内部制限です) オプション)。デリミタの記述として使用できます。 \s
の GNU 利用可能な短縮形を使用することも可能で、より短いです。 :
grep -c '^1[[:space:]]` file
grep -c '^1\s' file
ただし、区切り文字がコロンのようなものである場合、このオプションは失敗します :
またはその他の句読点 (または任意の文字)。
境界
または、数字から「数字ではない」境界への移行を使用できます。実際には「[_[:alnum:]]
にない文字」 (_a-zA-Z0-9
)":
grep -c '^1\b' file # portable but not POSIX.
grep -c '^1\>' file # portable but not POSIX.
grep -wc '^1' file # portable but not POSIX.
grep -c '^1\W' file # portable but not POSIX (not match only a `1`) (not underscore in BSD).
これは、1 で始まり、句読点が続く有効な行として受け入れます。
これが欲しいだけのようですね:
$ grep '^1\b' a
1 TGCAG.....
1 TGCAG......
このカウント部分について:
$ grep -c '^1\b' file
2
awk
で :
awk '$1 == "1" { print; x++ } END { print x, "total matches" }' inputfile