Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 字符串匹配时的Grep反转,而不是行匹配_Regex_String_Bash_Sed_Grep - Fatal编程技术网

Regex 字符串匹配时的Grep反转,而不是行匹配

Regex 字符串匹配时的Grep反转,而不是行匹配,regex,string,bash,sed,grep,Regex,String,Bash,Sed,Grep,我会继续解释为什么我需要帮助一个妈妈。我的一个文件目录被XSS攻击,在所有php文件的开头都放了一个长字符串。我尝试使用sed将字符串替换为空字符串,但它不起作用,因为要匹配的模式包含许多需要转义的字符 我发现我可以使用fgrep匹配模式文件中保存的固定字符串,但是我想替换每个文件中匹配的字符串(不是行),但是grep的-v会反转行上的结果,而不是匹配字符串的结尾 这是我在一个示例文件中使用的命令,该文件包含被黑客攻击的 fgrep -v -f ~/hacked-string.txt examp

我会继续解释为什么我需要帮助一个妈妈。我的一个文件目录被XSS攻击,在所有
php
文件的开头都放了一个长字符串。我尝试使用
sed
将字符串替换为空字符串,但它不起作用,因为要匹配的模式包含许多需要转义的字符

我发现我可以使用
fgrep
匹配模式文件中保存的固定字符串,但是我想替换每个文件中匹配的字符串(不是行),但是
grep
-v
会反转行上的结果,而不是匹配字符串的结尾

这是我在一个示例文件中使用的命令,该文件包含被黑客攻击的

fgrep -v -f ~/hacked-string.txt example.php

我需要输出包含
,我想你要问的是:

“是否可以使用grep实用程序从文件中删除固定字符串(可能包含大量regex元字符)的所有实例?”

在这种情况下,答案是“不”

我想你想问的是:

“从文件中删除固定字符串(可能包含大量正则表达式元字符)的所有实例的最简单方法是什么?”

这里有一个相当简单的解决方案:

delete_string() {
  awk -v s="$the_string" '{while(i=index($0,s))$0=substr($0,1,i-1)substr($0,i+length(s))}1'
}

delete_string 'some_hideous_string_with*!"_inside' < original_file > new_file
它将用于任何不包含换行符或NUL字符的字符串。变量中包含字符串后,可以使用上述函数:

delete_string "$the_string" < original_file > new_file

这不会处理有三个连续引号(
“”“
)的字符串。

每个文件中被黑客攻击的字符串都是相同的吗

如果字符中被破解字符串的长度为
1234
,则可以使用

tail -c +1235 file.php > fixed-file.php
对于每个受感染的文件

请注意,
tail c+1235
指示从输入文件的1235个字符开始输出。

使用perl:

perl -i.hacked -pe "s/\Q$(<hacked-string.txt)\E//g" example.php

perl-i.hacked-pe“s/\Q$(垃圾字符串中是否有换行符?如果到处都是相同的字符串,请按长度或两端的几个字符或两个字符的组合进行匹配。
sed的s/^#@%\(.{666\}):|
或类似的内容。从被黑客攻击中恢复的唯一明智方法是从已知良好的备份或版本控制中恢复。请参阅
delete_string "$the_string" < original_file > new_file
delete_string() {
  python -c 'import sys;[sys.stdout.write(l.replace(r"""'"$1"'""","")) for l in sys.stdin]'
}
tail -c +1235 file.php > fixed-file.php
perl -i.hacked -pe "s/\Q$(<hacked-string.txt)\E//g" example.php