我在从 grep 中过滤出 hanzoMollusc (2) 时遇到问题。
https://node.hanzo.com/production/application/ (1)
https://node.hanzoMollusc.com/Messaging/Receiver (2)
我的 grep 命令是 (2) 的,它工作得很好。
/usr/xpg4/bin/grep -E 'node.hanzoMollusc.*Exception' diag* | grep -c 2013-03-28
问题是如果我想搜索 (1) 我需要稍微修改 grep 命令并在手册中所述的地方使用 -F
"Matches using fixed strings. Treats each pattern specified as a string instead of a regular expression"
这是我到目前为止所想到的......这不起作用......
/usr/xpg4/bin/grep -F 'https://node.hanzo.com/application/*Exception' diag* | grep -c 2013-03-28
我的问题在于域部分,即node.hanzo和node.hanzoMollusc,这就是为什么我没有在(1)上使用-E。谁能帮我解决这个问题。
编辑
通过对吉尔斯的例子进行一些调整,我能够得到我想要的东西。实际上他是对的,我尝试阅读我的问题,但不清楚。我的问题是这样的。
我在过滤此内容时遇到问题
https://node.hanzoMollusc.com/Messaging/Receiver
每次我使用这个命令时:
/usr/xpg4/bin/grep -E 'node.hanzoMollusc.*Exception' diag* | grep 2013-03-28
因为它还在结果中显示了node.hanzo 和node.hanzoMollusc。
我调整了吉尔斯的例子,我能够得到正确的结果
/usr/xpg4/bin/grep -E '(https://node.hanzo.com/production/application)[/ ].*Exception' diag*
非常感谢吉尔斯。
答案1
不清楚你想要匹配什么:你的例子是矛盾的。
grep -F
匹配精确的字符串。如果*
在参数中放入 a ,则它仅匹配*
文件中的一个字符。
如果您想允许匹配多个字符串,请使用-E
and|
运算符。例如,以下命令匹配包含https://node.hanzo.com/production/application/somepath Exception Foo
or 的行https://node.hanzoMollusc.com/Messaging/Receiver/somepath Exception Foo
(其中该/somepath
部分是可变的并且可以省略)。
grep -E '(https://node.hanzo.com/production/application|node.hanzoMollusc.com/Messaging/Receiver)[/ ].*Exception' diag*