英数字項目ではなく Grep 数値のみを使用

英数字項目ではなく Grep 数値のみを使用

次の値のリストがあります。

1
2
3
4
Ak123
Ak23
Ak147
1Apple
2Apricot
3Mango
4Orange

数字だけをリストするために単純なgrepコマンドを実行したいと思います。つまり1、、、、2です。34私はこのコマンドを試しました -

grep -Ein --color '^\s*[0-9]' test.txt

ただし、英数字も返します。代わりに、次のコマンドで文字を省略してみました。

grep -Ein --color '^\s*[0-9][^A-Z]' test.txt

しかし、結果はゼロです。

答え1

各行には空白なしで1つの単語しか含まれていないとします。

grep -x -E '[0-9]+'

または

grep -x -E '[[:digit:]]+'

これにより、数字のみを含む行が抽出されます。パターンがライン全体に一致するように-x強制するオプションです。.grep-E+

パターンは[[:digit:]]+少なくとも1つの数字と一致します。一致する数値タイプは地域によって異なる場合があります。

先行および末尾のスペースを許可します。

grep -x -E '[[:blank:]]*[0-9]+[[:blank:]]*'

または

grep -x -E '[[:blank:]]*[[:digit:]]+[[:blank:]]*'

このパターンは、[[:blank:]]*ゼロ個以上のタブまたはスペースと一致します。


式は^\s*[0-9]空白文字で始まり(\s空白文字と一致すると仮定すると実際にはPCREです)、数字を含む行と一致します。数字の後には、文字列などの任意の文字が表示されることがあります2Apricot

あなたの表現は^\s*[0-9][^A-Z]似ていますが、[^A-Z]文字ではなく2番目の大文字ではない文字の一致を行います。これは、などの長い文字列と一致します33が、1a単一の5-文字列と一致しません3

答え2

また試み

$ grep -v '[^ 0-9]' file
1
2
3
4

答え3

使用

grep -Eo '[0-9]{1,3}' filename

-Eoの数字と一致する数値データのみを出力し、数字の[]数字は{}grepしたい数字の長さを示します。

答え4

cat file | grep -v '[[:alpha:]]' | grep -o '[0-9]*'

関連情報