在文本中搜索数字

在文本中搜索数字

我有一个文本文件,我想扫描该文本文件以获取特定号码。假设文本文件是:

asdg32dasdgdsa
dsagdssa11
adad 12345
dsaga

现在我想搜索一个长度为5的数字并打印出来( 12345)。

我怎样才能在 Linux 中做到这一点?

答案1

您正在寻找grep命令:

DESCRIPTION
   grep searches the named input FILEs for lines containing a match to the
   given PATTERN.  If no files are specified, or if the file “-” is given,
   grep  searches  standard  input.   By default, grep prints the matching
   lines.

因此,要查找数字12345,请运行:

$ grep 12345 file
adad 12345

这将打印所有匹配的行12345。要仅打印该行的匹配部分,请使用以下-o标志:

$ grep -o 12345 file
12345

要查找长度为 5 的任何连续数字,您可以使用以下之一:

$ grep -o '[0-9][0-9][0-9][0-9][0-9]' file
12345
$ grep -o '[0-9]\{5\}' file
12345
$ grep -Eo '[0-9]{5}' file 
12345
$ grep -Po '\d{5}' file 
12345

要执行相同的操作但忽略任何超过 5 位数字的数字,请使用:

$ grep -Po '[^\d]\K[0-9]{5}[^\d]*' file
12345

答案2

grep -o '[0-9][0-9][0-9][0-9][0-9]' file

答案3

POSIXly:

tr -cs '[:digit:]' '[\n*]' <file | grep '^.\{5\}$'

相关内容