标签: grep

这个 [t]ricky 括号表达式在 grep 中是如何工作的?

我最近看到了这个单行:

$ 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 似乎停止工作了!

这里有人会知道发生了什么我敢肯定。

谢谢。

command-line bash grep

41
推荐指数
2
解决办法
3万
查看次数

grep "+" 运算符不起作用

这个

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)

什么都不输出。

为什么?我刚换*+。不是很相似吗?运算符+只需要至少一个匹配项,*零个或多个匹配项。

grep

40
推荐指数
2
解决办法
2万
查看次数

跟踪日志文件但仅显示特定行

我正在使用 -f 标志跟踪日志文件。然后我将它传递给 grep,以仅查找包含“X”的行。这工作得很好。现在我想再次将它传送到另一个 grep 中,这将删除所有包含“Y”的行。当我添加第二个管道时,文件停止刷新,看起来没有数据到来。

这是有效的命令: tail -f my_file.log | grep "X"

这是没有的命令: tail -f my_file.log | grep "X" | grep -v "Y"

我应该如何构造它以便命令起作用?

command-line grep

40
推荐指数
3
解决办法
8万
查看次数

如何 grep 2 或 3 行,其中一行包含我想要的文本,而其他行则在其下方?

这是错误日志的快照:

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 模式后的行吗?

command-line bash grep

39
推荐指数
2
解决办法
11万
查看次数

将 grep 的输出保存到带有颜色的文件中

我需要将 grep 命令的结果保存到一个文件中,但我也希望输出文件被格式化并保持颜色就像在终端中一样。

有没有办法做到这一点?也许将 grep 保存为某种标记语言?如果不可能,是否有其他工具可以完成此任务?

我试图让搜索关键字在输出文件中脱颖而出,就像在终端中一样。

colors python command-line grep ansi

39
推荐指数
2
解决办法
2万
查看次数

用于查看日志的 GUI(tail 和 grep)

您能推荐一个具有强大日志监视功能的 GUI 应用程序吗?

通常它会像tail -f在 GUI 中一样工作,但除此之外,以下功能将非常有用:

  • 根据(正则)表达式过滤掉一些行
  • 根据(正则)表达式为一些线条着色
  • 交互式搜索
  • 可保存的配置轻松适用于不同的文件
  • 基于(正则)表达式的通知

Windows 上的一个类似工具是BareTail及其付费版本 - BareTailPro

tail grep software-recommendation log

36
推荐指数
3
解决办法
5万
查看次数

“xargs grep”有什么作用?

我知道该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 正在做什么而苦苦挣扎,因此感谢您提供任何帮助!

command-line grep xargs

34
推荐指数
3
解决办法
7万
查看次数

在 grep 中省略文件名

我正在从多个文件中提取一个字符串,但一个不希望的副作用是输出前的文件名。如何仅使用 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)

command-line bash grep cat

31
推荐指数
1
解决办法
3万
查看次数

grep 行缓冲有什么作用?

这是我在脚本中用于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)

grep

31
推荐指数
1
解决办法
3万
查看次数

使用带有管道和符号的 grep 来过滤 find 中的错误

我正在使用 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)

请解释符号的含义。

command-line bash grep find

29
推荐指数
2
解决办法
3万
查看次数

标签 统计

grep ×10

command-line ×7

bash ×4

ansi ×1

cat ×1

colors ×1

find ×1

log ×1

python ×1

software-recommendation ×1

tail ×1

xargs ×1