【问题标题】:Perl Script to Grep Directory For String and PrintPerl 脚本到 Grep 目录以获取字符串并打印
【发布时间】:2016-09-03 15:11:12
【问题描述】:

我想创建一个 perl 或 bash 脚本,它将读取键盘输入并分配一个变量,在充满 Snort 日志的当前目录中递归执行固定字符串 grep,然后自动 tcpdump 匹配的文件,grep 其输出,并将指定的行打印到终端。有谁知道这应该如何工作?

这是我想要从脚本中获得的方法的示例:

第 1 步:读取键盘输入并将其分配给名为字符串的变量。

第二步命令:grep -Fr "$string"

第 2 步输出:snort.log.1470609906 匹配

第三步命令:tcpdump -r snort.log.1470609906 | grep -F "$string" C-10

第三步输出:

Snort log

【问题讨论】:

  • 为什么选择 Perl?为什么不直接使用 grep?
  • 尝试自动化该过程。我希望能够输入 perl grep.pl "google.com" 之类的内容,并让一切都在幕后工作。

标签: linux bash perl grep


【解决方案1】:

这里有一些 bash 代码可以做到这一点:

s="google.com"
grep -Frl "$s" | \
    while IFS= read -r x; do
        tcpdump -r "$x" | grep -F "$s" -C10
    done

【讨论】:

  • 非常感谢redneb。有没有办法在 grepping 之前根据输入使“google.com”成为变量?
  • 我的意思是从键盘输入分配的变量。我尝试了以下方法,但似乎它试图读取作为文件名输入的字符串:#!/bin/bash read -p "Enter fixed string to search:" string grep -Frl "$string" | \ 而 IFS = 读取 -r x; do tcpdump -r "$x" grep -F "$string" -C 10 完成
  • 你可以在脚本的开头说s="$1"。然后,您可以将字符串作为命令行参数传递给保存上述代码的脚本。如果您想从标准输入读取它,请将第一行替换为IFS= read -r s
  • 非常感谢,redneb。
  • 完成。再次感谢。
【解决方案2】:

idk 关于 perl 但你可以很容易地在 shell 中做到这一点:

str="google.com"
find . -type f -name 'snort.log.*' -exec grep -FlZ "$str" {} + |
xargs -0 -I {} sh -c 'tcpdump -r "{}" | grep -F '"$str"' -C10'

【讨论】:

  • 这正是我需要的 Ed。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多