标签: grep

如何在旧版本的 grep 中重现 grep 的 --recursive 选项

我正在研究一个grep缺乏 -r/--recursive 选项的古老 UNIX 。

我需要找到我们的应用程序导致的错误,但我不知道我们的应用程序将错误写入哪个日志文件。但是,我确实知道日志文件位于/opt. 所以我想/opt*.log. 这是我尝试过的:

find /opt | xargs grep FooErrorMessage
Run Code Online (Sandbox Code Playgroud)

-- 但这不起作用,我不知道在哪里指定我只想要*.log命令中的文件。

linux grep

2
推荐指数
1
解决办法
1670
查看次数

Spamassassin one-liner 使用 X-Spam-Flag 标记和移动邮件:YES 到新目录?

假设您有一个包含数万条消息的目录。并且您想将垃圾邮件与非垃圾邮件分开。

具体来说,您希望:

  1. 针对目录运行 spamassassin,用 X-Spam-Flag 标记每封邮件:如果认为它是垃圾邮件,则为 YES
  2. 使用 tcsh shell 或 perl one-liner grep 所有带有标志的邮件并将这些邮件移动到 /tmp/spam

您可以运行什么命令来完成此操作?例如,一些伪代码:

/usr/local/bin/spamassassin -eL ./Maildir/cur/* | grep "X-Spam-Flag: YES" | mv %1 /tmp/spam
Run Code Online (Sandbox Code Playgroud)

scripting spam grep spamassassin maildir

2
推荐指数
1
解决办法
1417
查看次数

Tail、grep 和计算在一个命令中找到的实例?

我正在拖尾文件输出并搜索具有某些数据的行。我不想将数据输出到屏幕,而是计算它找到的实例数并将其发送到屏幕。实例的数量可以滚动和递增,也可以覆盖现有的并且仅在递增时显示它。那部分并不重要,我只需要找到实例的运行计数。

我现在的命令是

tail -f 日志文件 | grep '我想要的数据'

我试过使用 grep -c 和 wc -l 但没有给我想要的结果。这个特定的 Linux 发行版没有 pv 并且无法获得它。有没有办法做到这一点?

linux grep tail count

2
推荐指数
1
解决办法
6997
查看次数

从文本文件中提取 ID

我在下面有一个文本文件

 {
  "data": {
    "assigned-entity-id": null,
    "assigned-entity-type": null,
    "availability-domain": null,
    "compartment-id": "ocid1.tenancy.oc1..dgfmmnusmgibmkdomuijsngimimfimfgiufmgifmdsfsdsgsmgsifmg",
    "defined-tags": {
      "Oracle-Tags": {
        "CreatedBy": "abcd@gmail.com",
        "CreatedOn": "2021-03-20T13:26:04.662Z"
      }
    },
    "display-name": "ABC",
    "freeform-tags": {},
    "id": "ocid1.database.oc1.cd-south-1.amaaaaaago5rdtya6mmvwjfdpdebz7twdxlfdsdssssssaaaaaaadddddd",
    "ip-address": "1.1.1.1",
    "lifecycle-state": "AVAILABLE",
    "lifetime": "XXXXXXX",
    "private-ip-id": null,
    "public-ip-pool-id": null,
    "scope": "REGION",
    "time-created": "2021-03-20T13:26:04.748000+00:00"
  },
  "etag": "cdsssss"
}
{
  "data": {
    "assigned-entity-id": null,
    "assigned-entity-type": null,
    "availability-domain": null,
    "compartment-id": "ocid1.tenancy.oc1..dgfmmnusmgibmkdomuijsngimimfimfgiufmgifmdsfsdsgsmgsifmg",
    "defined-tags": {
      "Oracle-Tags": {
        "CreatedBy": "abcd@gmail.com",
        "CreatedOn": "2021-03-20T13:26:09.523Z"
      }
    },
    "display-name": "ASD",
    "freeform-tags": {},
    "id": "ocid1.database.oc1.cd-south-1.amaaaaaago5rdtya6mmvwjfdpdezzzzzzzzzzzzzzzzzzzddddddddddddddd",
    "ip-address": "2.2.2.2",
    "lifecycle-state": "AVAILABLE",
    "lifetime": "XXXXXXX",
    "private-ip-id": …
Run Code Online (Sandbox Code Playgroud)

linux unix grep awk

2
推荐指数
1
解决办法
228
查看次数

如何从文件中提取特定行

如何从文件夹中的文件中提取特定行。

基本上我有一个文件夹 /my/cool/folder/myfile.txt

我知道它有一行: I am cool lkasjdfaksldfj

如何在该文件上进行 grep,以便I am cool ....在终端上显示以开头的行?

grep

1
推荐指数
1
解决办法
650
查看次数

tail -f 然后退出匹配的字符串

我正在尝试配置一个启动脚本,该脚本将启动 tomcat,监视 catalina.out 中的字符串“服务器启动”,然后运行另一个进程。我一直在尝试 tail -f 与 grep 和 awk 的各种组合,但还没有任何工作。我遇到的主要问题似乎是在 grep 或 awk 匹配字符串后强制尾部死亡。

我已简化为以下测试用例。

test.sh is listed below:

#!/bin/sh    
rm -f child.out
./child.sh > child.out &
tail -f child.out | grep -q B

child.sh is listed below:

#!/bin/sh
echo A
sleep 20
echo B
echo C
sleep 40
echo D
Run Code Online (Sandbox Code Playgroud)

我看到的行为是 grep 在 20 秒后退出,但是尾部将需要另外 40 秒才能死亡。我理解为什么会发生这种情况 - tail 只会在写入管道时注意到管道消失了,这仅在数据附加到文件时发生。由于 tail 将缓冲数据并将 B 和 C 字符作为单个写入输出(我通过 strace 确认了这一点)这一事实使情况更加复杂。我试图用我在其他地方找到的解决方案来解决这个问题,例如使用 unbuffer 命令,但这没有帮助。

有人对如何按照我的预期进行工作有任何想法吗?或者等待Tomcat成功启动的想法(考虑等待TCP端口知道它已经启动,但怀疑这会变得比我现在想要做的更复杂)。我已经设法让它与 awk 一起工作,在比赛中做一个“killall tail”,但我对这个解决方案不满意。注意我试图让它在 RHEL4 上工作。

automation tomcat bash grep tail

1
推荐指数
1
解决办法
5859
查看次数

在目录中定位特定字符串

我想做以下事情:

cat *.xml | grep some_string_here

这告诉我目录中的 xml 文件中是否存在特定字符串。不幸的是,它没有告诉我是哪个文件。

我怎样才能做得更好?cat命令没有看到我有一个向输出添加文件名前缀的开关......

unix search command-line-interface grep cat

1
推荐指数
1
解决办法
134
查看次数

我如何告诉 grep 在我有权限的文件中搜索?

当我打电话

cd /
grep -r "some_str" .
Run Code Online (Sandbox Code Playgroud)

然后我看到屏幕上打印了很多文件,在行尾我看到“:权限被拒绝”。我如何告诉 bash 只在我有权限的文件中搜索。这显然会比标准 grep 快。

permissions bash grep

1
推荐指数
1
解决办法
4383
查看次数

GREP 中的正则表达式

我有一个 .xml 文件。里面的标签是:

<Info>Product</Info>
Run Code Online (Sandbox Code Playgroud)

现在,我在文件中有 20 000 个这样的标签。然而,一个标签可以正常启动,但缺少正确的结束标签。如何找到哪一行正确开始但没有以正确的标签结束?

谢谢。

grep regular-expressions

1
推荐指数
1
解决办法
114
查看次数

如何在 Mac 和 Linux 上使用 tcpdump 从现有的 tcp 套接字转储原始数据包?

一旦我知道了 IP 地址和端口号组合,我就可以运行它来查看一些数据包:

tcpdump | grep [IPADDRESS]

有人知道我现在如何也能看到原始数据包吗?

谢谢!

grep packet-sniffer tcpdump

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