如何搜索文件以查找匹配的整行?

如何搜索文件以查找匹配的整行?

我有一个命令,它向stdout一系列数字发送数据,每个数字占一行。我需要确定列表中是否存在特定数字。匹配必须是精确的,而不是子集。例如,解决此问题的一种简单但行不通的方法是:

/run/command/outputing/numbers | grep -c <numberToSearch>

我的版本在搜索“456”时对以下列表给出了误报:

1234567
98765
23
1771

如果计数非零,则表示找到匹配项,如果计数为零,则表示该数字不在列表中。

问题在于 numberToSearch 可以匹配一行上的数字子序列,而我只想匹配整行。我查看了 grep 的手册页,没有找到任何只匹配整行的方法。有没有办法做到这一点,或者我最好使用或awksed其他工具?我需要一个二进制答案来确定要搜索的数字是否存在。

答案1

添加到安斯加的回答,考虑用-l(小写L)代替-c。它(-l)会给你一个是或否的答案。

/run/command/outputting/numbers | grep –l '^456$'

如果找到匹配的行,将输出“ (standard input)”并以状态 0 退出;如果未找到文本,它将不输出任何内容并以状态 1 退出。 的某些版本grep还支持-q(quiet) 选项,它将抑制所有输出并仅给出退出状态。

这些选项的优点是它们能够在第一次遇到搜索字符串时退出,并且不需要读取整个输入。如果您需要命令运行完成,这些选项可能会有害。

答案2

来自 GNU grep 手册:

`-x'
`--line-regexp'
     Select only those matches that exactly match the whole line.
     (`-x' is specified by POSIX.)

所以:

/run/command/outputing/numbers | grep -x <numberToSearch>

将为你提供整行匹配:

/run/command/outputing/numbers | grep -cx <numberToSearch> 

将获得整行匹配的数量。

答案3

num=23
/run/command/outputing/numbers | grep -c "^$num$"

将 23 替换为您要查找的数字。

相关内容