sed,替换第一行

sed,替换第一行,sed,Sed,我因为运行一个非常过时的Drupal安装而被黑客攻击(真丢脸) 似乎他们在每个.php文件中都注入了以下内容 您可以将sed与以下内容一起使用 sed '1 s/^.*$/<?php/' sed'1 s/^.*$/要替换文件的第一行,可以使用sed的c(用于“更改”)命令: sed '1c<?php' sed'1我想您可能想将其更改为类似如何输入反斜杠?这不起作用:sed-i“1s/^.*$/test1/test2/”文件我想这有点晚了,但对于可能处于相同情况的任何人来说:永远

我因为运行一个非常过时的Drupal安装而被黑客攻击(真丢脸)

似乎他们在每个
.php
文件中都注入了以下内容


您可以将
sed
与以下内容一起使用

sed '1 s/^.*$/<?php/'

sed'1 s/^.*$/要替换文件的第一行,可以使用
sed
c
(用于“更改”)命令:

sed '1c<?php' 

sed'1我想您可能想将其更改为类似
如何输入反斜杠?这不起作用:sed-i“1s/^.*$/test1/test2/”文件我想这有点晚了,但对于可能处于相同情况的任何人来说:永远不要尝试修复被黑客攻击的系统。唯一的解决方案是从头开始重新安装,只复制手动验证的配置文件和数据库转储文件。我认为这并没有达到预期效果。首先,它似乎缺少
/
的结束分隔符。其次,regex
^$
只捕获一个空行,而不是第一行。除非第一行确实是空的。@DanNguyen没有缺少分隔符:
1,/^$/
是地址(或范围),这意味着:从第1行到第一个空行,用
c
后面的内容替换该范围(用于“更改”)。它不仅在理论上起作用,而且在实践中也起作用。请在否决投票前验证解决方案,谢谢。我承认我对
c
操作符一无所知。我确实知道@Scharron的答案一目了然是有道理的,并且在
sed
的BSD和GNU版本上对我都有效。当我测试您的解决方案时,它要么抛出错误,要么找不到匹配项。很高兴在这一点上出错,因为我对
c
操作符不太了解。下面是我的代码:您的示例不包含空行,因此地址当然不匹配。顺便说一下,
c
的语法是:
[address1[,address2]]c\text
。是的,这是反斜杠后面的文字换行符,GNU版本的
sed
不需要反斜杠。因此,要使您的
sed
示例正常工作(没有空行):
sed'1,3c\@DanNguyen感谢您的反馈。大多数人只使用sed提供的
s/re/sub/
功能(我知道我使用过),但它实际上提供了相当广泛的功能库。手册页实际上帮不了多少忙,但奥莱利的书《sed&awk》帮了不少忙。强烈推荐。
sed '1c<?php' 
sed '1,/^$/c<?php'