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等之后显示任何内容。
非常感谢任何建议,
答案 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
答案 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