我最近看到了这个单行:
$ ps -ef | grep [f]irefox
thorsen 16730 1 1 Jun19 ? 00:27:27 /usr/lib/firefox/firefox ...
Run Code Online (Sandbox Code Playgroud)
因此,它似乎返回数据中带有“firefox”的进程列表,但忽略了 grep 进程本身,因此似乎大致相当于:
ps -ef |grep -v grep| grep firefox
Run Code Online (Sandbox Code Playgroud)
我无法理解它是如何工作的。我查看了 grep 和其他地方的手册页,但没有找到解释。
如果我运行,则使谜团更加复杂:
$ ps -ef | grep firefox > data
$ grep [f]irefox data
thorsen 15820 28618 0 07:28 pts/1 00:00:00 grep --color=auto firefox
thorsen 16730 1 1 Jun19 ? 00:27:45 /usr/lib/firefox/firefox ....
Run Code Online (Sandbox Code Playgroud)
[t]rick 似乎停止工作了!
这里有人会知道发生了什么我敢肯定。
谢谢。
这个
ls -l /var/log | awk '{print $9}' | grep "^[a-z]*\.log."
Run Code Online (Sandbox Code Playgroud)
输出这个:
alternatives.log.1
alternatives.log.10.gz
alternatives.log.2.gz
alternatives.log.3.gz
alternatives.log.4.gz
alternatives.log.5.gz
alternatives.log.6.gz
alternatives.log.7.gz
alternatives.log.8.gz
alternatives.log.9.gz
apport.log.1
apport.log.2.gz
apport.log.3.gz
Run Code Online (Sandbox Code Playgroud)
但是这个:
ls -l /var/log | awk '{print $9}' | grep "^[a-z]+\.log."
Run Code Online (Sandbox Code Playgroud)
什么都不输出。
为什么?我刚换*到+。不是很相似吗?运算符+只需要至少一个匹配项,*零个或多个匹配项。
我正在使用 -f 标志跟踪日志文件。然后我将它传递给 grep,以仅查找包含“X”的行。这工作得很好。现在我想再次将它传送到另一个 grep 中,这将删除所有包含“Y”的行。当我添加第二个管道时,文件停止刷新,看起来没有数据到来。
这是有效的命令: tail -f my_file.log | grep "X"
这是没有的命令: tail -f my_file.log | grep "X" | grep -v "Y"
我应该如何构造它以便命令起作用?
这是错误日志的快照:
06:16:29,933 ERROR EmailRMManager$:45 - Exception In get Message
com.rabbitmq.client.AlreadyClosedException: clean connection shutdown; reason: Attempt to use closed channel
at com.rabbitmq.client.impl.AMQChannel.ensureIsOpen(AMQChannel.java:195)
at com.rabbitmq.client.impl.AMQChannel.rpc(AMQChannel.java:222)
at com.rabbitmq.client.impl.AMQChannel.rpc(AMQChannel.java:208)
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:139)
at com.rabbitmq.client.impl.ChannelN.basicGet(ChannelN.java:645)
Run Code Online (Sandbox Code Playgroud)
我执行以下命令:
cat foo.log | grep ERROR 获得 OP 为:
06:16:29,933 ERROR EmailRMManager$:45 - Exception In get Message
我应该执行什么命令来获得输出
06:16:29,933 ERROR EmailRMManager$:45 - Exception In get Message
com.rabbitmq.client.AlreadyClosedException: clean connection shutdown; reason: Attempt to use closed channel
Run Code Online (Sandbox Code Playgroud)
即,还 grep 模式后的行吗?
我需要将 grep 命令的结果保存到一个文件中,但我也希望输出文件被格式化并保持颜色就像在终端中一样。
有没有办法做到这一点?也许将 grep 保存为某种标记语言?如果不可能,是否有其他工具可以完成此任务?
我试图让搜索关键字在输出文件中脱颖而出,就像在终端中一样。
您能推荐一个具有强大日志监视功能的 GUI 应用程序吗?
通常它会像tail -f在 GUI 中一样工作,但除此之外,以下功能将非常有用:
Windows 上的一个类似工具是BareTail及其付费版本 - BareTailPro
我知道该grep命令并且正在了解 的功能xargs,因此我通读了此页面,其中提供了一些有关如何使用该xargs命令的示例。
我对最后一个示例感到困惑,示例 10。它说“xargs 命令执行 grep 命令以查找包含字符串 'stdlib.h' 的所有文件(在 find 命令提供的文件中)”
$ find . -name '*.c' | xargs grep 'stdlib.h'
./tgsthreads.c:#include
./valgrind.c:#include
./direntry.c:#include
./xvirus.c:#include
./temp.c:#include
...
...
...
Run Code Online (Sandbox Code Playgroud)
但是,简单地使用有什么区别
$ find . -name '*.c' | grep 'stdlib.h'
Run Code Online (Sandbox Code Playgroud)
?
显然,我仍在为 xargs 正在做什么而苦苦挣扎,因此感谢您提供任何帮助!
我正在从多个文件中提取一个字符串,但一个不希望的副作用是输出前的文件名。如何仅使用 grep 抑制文件名输出?
$ grep -i lp lpNet*
lpNet:This was printed via the internet using the lp command.
lpNet:I believe lp doesnt care what the device is.
lpNet1:This was printed via the internet using the lp command.
lpNet1:I believe lp doesnt care what the device is.
lpNet2:This was printed via the internet using the lp command.
lpNet2:I believe lp doesnt care what the device is.
lpNet3:This was printed via the internet using the lp command.
lpNet3:I believe lp doesnt care …Run Code Online (Sandbox Code Playgroud) 这是我在脚本中用于grep实时数据的命令。它似乎没有正确提取实时数据,因为它只是错过了一些行。
tail -f <file> | fgrep "string" | sed 's/stuff//g' >> output.txt
Run Code Online (Sandbox Code Playgroud)
下面的命令会做什么?什么是“行缓冲”?
tail -f <file> | fgrep --line-buffered "string" | sed 's/stuff//g' >> output.txt
Run Code Online (Sandbox Code Playgroud) 我正在使用 cygwin 在 cygdrive 上查找文件。
但是我需要取消权限被拒绝的消息(否则结果会隐藏在错误消息中)。以下命令有效:
find -name 'myfile.*' |& grep -v "Permission denied"
Run Code Online (Sandbox Code Playgroud)
我不明白为什么需要将 & 符号放入此命令中,本以为它会起作用,但事实并非如此。
find -name 'myfile.*' | grep -v "Permission denied"
Run Code Online (Sandbox Code Playgroud)
请解释符号的含义。