0
grep (GNU grep) 2.14

你好,

我有一个日志文件,我想过滤一个选定的单词。但是,它往往会过滤许多例如。

tail -f gateway-* | grep "P_SIP:N_iptB1T1"

这也会找到这样的词:

"P_SIP:N_iptB1T10"
"P_SIP:N_iptB1T11"
"P_SIP:N_iptB1T12"
etc

但是,我不想在 1. grep 拾取 11、12、13 等之后显示任何内容。

非常感谢您的任何建议,

4

4 回答 4

2

您可以将单词限制为以 1 结尾:

tail -f gateway-* | grep "P_SIP:N_iptB1T1\>"

假设您有一个只有“P_SIP:N_iptB1T1”的匹配案例,这将起作用。但是如果你想从 P_SIP:N_iptB1T1x 中提取,并且只显示一次,那么你需要限制只显示第一个匹配。

于 2013-04-30T04:10:12.343 回答
1

如果这些行包含示例中的引号,只需使用-Egrep 中的选项并将结束引号与\". 例如:

grep -E "P_SIP:N_iptB1T1\"" file

如果这些引号不在文本文件中,并且单词后有空格或结束线,您也可以匹配这些:

# The word is followed by one or more blanks
grep -E "P_SIP:N_iptB1T1\s+" file

# Match lines ending with the interesting word
grep -E "P_SIP:N_iptB1T1$" file
于 2013-04-30T04:12:08.563 回答
1
grep -o "P_SIP:N_iptB1T1"
-o, --only-matching 仅显示与 PATTERN 匹配的行的一部分

更多信息

于 2013-04-30T03:41:24.850 回答
1

至少可以尝试两种方法:

grep -w pattern匹配完整的单词。似乎也适用于这种情况,即使模式有标点符号。

grep pattern -m 1将输出限制为第一个匹配。(也可以用grep xxx | head -1

于 2013-04-30T03:52:18.747 回答