用Perl脚本搜索目录中的字符串并打印

1 人关注

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

下面是我想从脚本中得到的方法的一个例子。

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

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

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

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

step 3 output:

Snort log

2 个评论
Why Perl? Why not just use grep?
试图使这个过程自动化。我希望能够输入类似perl grep.pl "google.com "的东西,并让一切在幕后工作。
linux
bash
perl
grep
CodingNovice
CodingNovice
发布于 2016-09-03
2 个回答
redneb
redneb
发布于 2016-09-03
已采纳
0 人赞同

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

s="google.com"
grep -Frl "$s" | \
    while IFS= read -r x; do
        tcpdump -r "$x" | grep -F "$s" -C10
    
非常感谢redneb。有没有办法在grepping之前根据输入使 "google.com "成为变量?
我是指从键盘输入分配的变量。我尝试了以下方法,但似乎它试图读取作为文件名输入的字符串。 #!/bin/bash read -p "输入要搜索的固定字符串。" string grep -Frl "$string" | \ while IFS = read -r x; do tcpdump -r "$x" grep -F "$string" -C 10 done
你可以在脚本的开头说 s="$1" 。然后你可以把这个字符串作为命令行参数传给你保存上述代码的脚本。如果你想从stdin中读取它,就用 IFS= read -r s 替换第一行。
非常感谢,Redneb。
完成了。再次感谢。
Ed Morton
Ed Morton
发布于 2016-09-03
0 人赞同

我不知道Perl的情况,但你可以用Shell来做,很简单。