次の値のリストがあります。
1
2
3
4
Ak123
Ak23
Ak147
1Apple
2Apricot
3Mango
4Orange
数字だけをリストするために単純なgrepコマンドを実行したいと思います。つまり1
、、、、2
です。3
4
私はこのコマンドを試しました -
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]*'