在我的日志中,我有许多看起来像这样的行:
mysitename.net 1.23.45.67 - - [10/Mar/2017:20:28:38 +0000] "GET /foldername/special/somefile.php HTTP/1.1" 200 2012
有什么方法可以将所有唯一的PHP陷入文件中,因此我有访问的服务器上任何/所有文件的列表?
我尝试了:
grep -i "GET [w]+.php" mylogfile.txt > results.txt
但不会返回任何行。
grep,我会这样做:
$ a=$'mysitename.net 1.23.45.67 - - [10/Mar/2017:20:28:38 +0000] "GET /foldername/special/somefile.php HTTP/1.1" 200 2012'
$ grep -Eo 'GET.*php' <<<"$a"
GET /foldername/special/somefile.php
个人,尤其是在Mac中,我会选择Perl -Pe Oneliner,因为在所有平台中使用REGEX组在所有平台上都相同,将其与BackReference匹配。
在Bellow示例中,使用括号将整个输入字符串分为组。使用Perl替代(与SED相同),我们可以强迫Perl返回第三个输入组:
$ perl -pe 's/(.*)(GET )(.*.php)(.*)/3/g' <<<"$a" #if you want to include also the GET in your results then modify last part like .../23/g'
/foldername/special/somefile.php