标签: grep

grep 日期范围 - apache 日志

我想知道我怎么能做以下 grep:

  • grep Apache 日志仅适用于一系列日期,假设从 2010 年 11 月 5 日到 2010 年 12 月 5 日

  • grep 从 2010 年 11 月 15 日开始到最后一个日志条目的 Apache 日志。

谢谢

log-files grep

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

iptables - 清除具有特定目标地址的所有 PREROUTING 规则

我有一个添加 iptable PREROUTING 规则的脚本。他们都有同样的问题要解决。当我运行这个:

 iptables --list PREROUTING -t nat
Run Code Online (Sandbox Code Playgroud)

我看到这样的输出:

 DNAT       tcp  --  anywhere             165.193.122.18      tcp dpt:https to:192.168.2.1:443
 DNAT       tcp  --  anywhere             63.135.91.11        tcp dpt:https to:192.168.2.1:443
 DNAT       tcp  --  anywhere             63.135.90.224       tcp dpt:https to:192.168.2.1:443
Run Code Online (Sandbox Code Playgroud)

似乎我应该能够通过编写这样的命令来删除所有这些规则......

"drop all PREROUTING rules that go to 192.168.2.1:443"
Run Code Online (Sandbox Code Playgroud)

因此,在查看 itables 的选项时,我似乎需要使用 -D 选项。但我不知道给出它的规则。:-(

因此,我可能需要查询现有规则,grep 将其限制为目标 192.168.2.1:443,然后运行 ​​-D 并为每个规则传递规则编号。我不知道该怎么做。任何帮助,将不胜感激。

谢谢!

电动汽车

bash iptables grep

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

grep 不一致地默认为 grep -P?

我有一个脚本可以做一些内务处理,当从交互式 shell 调用时它运行良好,但在被 cron 调用时什么也没做。为了解决这个问题,我使用以下命令启动了一个带有“空白”环境的 shell:

env -i /bin/bash --noprofile --norc
Run Code Online (Sandbox Code Playgroud)

使用这个空白环境,我已经深入到我的脚本中,发现以下内容grep与任何文件都不匹配:

grep -il "^ws_status\s*=\s*[\"']remove[\"']$"
Run Code Online (Sandbox Code Playgroud)

但是,当从交互式 shell 运行时,该命令将返回匹配文件的文件名。

请注意,该表达式匹配如下行: WS_STATUS = "remove"

通过反复试验,我发现将-P选项添加到 [Perl regex] 中,命令开始在“空白”shell 中正常工作。但是,我不知道为什么我的登录 shell 似乎默认为grep -P.

  • 只有一个grep二进制,/bin/grep
  • 没有为grep=pgrep或定义别名grep="grep -P"
  • 没有GREP_OPTIONS定义环境变量。

这里有什么交易?

注:操作系统为 RHEL v5.10,Bash 为 v3.2.25,grep 为 v2.5.1

linux bash grep environment-variables

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

如何使用分页grep连续流

我将此发布给超级用户,但没有人接受:https : //superuser.com/questions/832578/how-to-grep-a-continuous-stream-with-paging

我想获取一个日志文件并过滤掉一些不相关的日志条目,例如 INFO 级别的日志条目。上面的 Stack Overflow 答案让我受益匪浅:

$ tail -f php_error_log | grep -v INFO
Run Code Online (Sandbox Code Playgroud)

我想要的下一部分是在此流中进行分页,例如使用 less。less +F 适用于连续流,但我不能将其应用于 grep。我怎样才能做到这一点?


自从发布该问题以来,我一直在研究它并发现它less正在等待 EOF 出现,并挂起直到它收到它(来源)。这解释了为什么尝试跟随管道不起作用。我编写了一个简短的脚本来做我想做的事,不优雅:

#!/bin/bash
tail -f /data/tmp/test.txt | grep --line-buffered foo > /data/tmp/foo &
pid=$!
echo $pid
sleep 1
less +F /data/tmp/foo
kill $pid
rm /data/tmp/foo
Run Code Online (Sandbox Code Playgroud)

我相信可以更优雅地做到这一点,也许使用一个无需直接交互即可自动清理的临时文件。

linux bash grep less

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

grep 输出文件路径与文件修改日期?

是否可以使grep命令输出文件修改日期的文件路径,如下所示:

12-02-2015 /file/path/to/the/file
16-02-2015 /file/path/to/the/file
25-02-2015 /file/path/to/the/file
03-04-2015 /file/path/to/the/file
Run Code Online (Sandbox Code Playgroud)

或者:

/file/path/to/the/file 12-02-2015
/file/path/to/the/file 12-02-2015
/file/path/to/the/file 12-02-2015
/file/path/to/the/file 12-02-2015
Run Code Online (Sandbox Code Playgroud)

linux debian grep

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

从 mbox 文件中提取最新消息的日期

我将如何提取 mbox 文件中最新收到的消息的“日期:”标头?

请注意,这不仅仅是对最新出现的“^Date:”进行 grep'ing 的问题,因为它也可能是引用回复的日期,而不是实际收到的最新消息。

因此,可能必须涉及一些适当的解析。

grepmail似乎擅长智能地浏览 mbox,但是我似乎无法找到一种方法来用它来完成这个看似微不足道的任务。

任何输入?

谢谢。

E:好的,我正式变胖了。ls -l mbox可能会做。所以在那里。

不过,我对更具创造性的方法非常感兴趣。

email unix grep mbox

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

从大文件开头删除文本的最佳方法

我有一个巨大的 MySQL 备份文件(来自 mysqldump),其中的表按字母顺序排列。我的恢复失败,我想从备份文件中的下一个表开始。(我已经纠正了这个问题,这实际上并不是一个关于 MySQL 恢复等的问题。)

我想做的是获取我的备份文件,例如backup.sql并修剪文件的开头,直到看到这一行:

-- Table structure for `mytable`
Run Code Online (Sandbox Code Playgroud)

然后之后的所有内容都将最终出现在我的结果文件中,例如backup-secondhalf.sql. 由于文件是 bzip2 压缩的,这有点复杂,但这应该不是什么大问题。

我想我可以这样做:

$ bunzip2 -c backup.sql.bz2 | grep --text --byte-offset --only-matching -e '--Table structure for table `mytable`' -m 1
Run Code Online (Sandbox Code Playgroud)

这将为我提供文件中我想要修剪的字节偏移。然后:

$ bunzip2 -c backup.sql.bz2 | dd skip=[number from above] | bzip2 -c > backup-secondhalf.sql.bz2
Run Code Online (Sandbox Code Playgroud)

不幸的是,这需要我在文件上运行 Bunzip2 两次并读取所有这些字节两次。

有没有办法一次性完成这一切?

我不确定我的 sed-fu 是否足够强大来执行“删除正则表达式之前的所有行,然后让文件的其余部分通过”表达式。

这是在 Debian Linux 上,所以我有可用的 GNU 工具。

text grep dd sed

5
推荐指数
2
解决办法
843
查看次数

“观察” FreeBSD 与 Linux 上的日志

在 Linux 系统上,我可以

watch -n1 tail /var/log/whatever.log
Run Code Online (Sandbox Code Playgroud)

或者

watch -n1 grep somestuff /var/log/whatever.log
Run Code Online (Sandbox Code Playgroud)

每 1 秒显示一次日志更新。然而,在 FreeBSD 上,watch命令完全做其他事情。谁知道我正在尝试做的一个好的 FreeBSD 命令?=)

linux freebsd grep logging tail

4
推荐指数
2
解决办法
6117
查看次数

grep 问题,如何过滤几种类型的模式?

我是控制台新手。据我所知,匹配多个模式是这样的:

aaa|bbb
Run Code Online (Sandbox Code Playgroud)

但是,| 字符是控制台上的管道,那么如何为 grep 指定这些多个模式?

grep

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

需要帮助 grepping postfix 日志

我正在尝试根据已知字符串(收件人地址)在日志中搜索未知字符串(消息 ID),然后对未知字符串进行 grep 以输出整个相关日志信息。我可以使用 grep 和 cut 来输出未知的字符串,但是从那里我很难将它传递给 grep。我使用了一个管道到 xargs grep 并且没有产生我正在寻找的输出。这是我用来 grep 和 cut 的命令:

grep 'to=<emailaddress' /var/log/maillog | cut -d ' ' -f 6
Run Code Online (Sandbox Code Playgroud)

这将生成 Postfix 为 emailaddress 处理的消息的所有未知字符串的输出。当我通过管道传输到 xargs 时,我收到“grep:: 没有这样的文件或目录:

grep 'to=<emailaddress' /var/log/maillog | cut -d ' ' -f 6 | xargs grep /var/log/maillog
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助。

freebsd postfix grep logging

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

标签 统计

grep ×10

linux ×4

bash ×3

freebsd ×2

logging ×2

dd ×1

debian ×1

email ×1

environment-variables ×1

iptables ×1

less ×1

log-files ×1

mbox ×1

postfix ×1

sed ×1

tail ×1

text ×1

unix ×1