如何使用grep对选定的单词进行过滤

时间:2013-04-30 03:39:07

标签: grep

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 个答案:

答案 0 :(得分:2)

您可以将单词限制为1:

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

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

答案 1 :(得分:1)

grep -o "P_SIP:N_iptB1T1"
 -o, --only-matching       show only the part of a line matching PATTERN

More info

答案 2 :(得分:1)

至少可以尝试两种方法:

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

grep pattern -m 1将输出限制为第一次匹配。 (也适用于grep xxx | head -1

答案 3 :(得分:1)

如果行中包含引号,请在grep中使用-E选项,并将结束引号与\"匹配。例如:

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