当该字符串的一部分未知时,如何将命令传递给grep以搜索某个字符串?


0

我正在使用的程序grep用于在系统日志中搜索特定警报,但是我正在寻找的syslog条目的一个元素将专门针对该条目,因此实际上是“随机的”。

我认为我正在寻找的一个例子是:

tail -f log | grep "string {ignore} string"

提前致谢。


使用.*你放置{ignore}“任何”通配符的地方。
dsstorefile1

Answers:


-2

您需要在命令中使用WildCards(或Globbing Patterns)grep如下所示:

 tail -f log | grep "some_string.*some_string"

其中,.*(注释中@ dsstorefile1也指出)是这里使用的globbing模式。要获取有关Globbing Patterns的更多详细信息,请参阅联机帮助页。


man 7 glob

这将显示:

     . (dot) : will match any single character (except end of line) , 
               equivalent to ? (question mark) in standard wildcard expressions.

* (asterisk) : the proceeding item is to be matched zero or more times.
               ie. n* will match n, nn, nnnn, nnnnnnn
                           but not na or any other character.

现在,结合这两个你得到:

.* (dot and asterisk) : match any string, equivalent to * in standard wildcards.

另外,正如@Bob在评论中指出的那样,使用效果.*?要好得多.*


2
.*贪婪,可能捕获超过你想要的。.*?通常更好。
鲍勃

1
这与“ ?代替.” 无关。再次阅读我的评论 - 这?是一个修饰符*,使其变得懒惰而不是贪婪的默认值。假设PCRE。
Bob

2
我还应该指出这是正则表达式(默认情况下grep正在执行POSIX正则表达式),而不是shell glob。
Bob

@Bob编辑了我的答案,请你详细说明如何.*更贪婪和使用.*?
C0deDaedalus

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.