如何使用bash在Linux上删除多个文件中的多行

如何使用bash在Linux上删除多个文件中的多行,linux,bash,replace,sed,find,Linux,Bash,Replace,Sed,Find,我正在尝试从Linux共享主机上的所有Javascript文件中删除2行。我想在不编写脚本的情况下实现这一点,因为我知道这应该可以通过sed实现。我当前的尝试如下所示: find . -name "*.js" | xargs sed -i ";var O0l='=sTKpUG" 第二行实际上比这行长,但是是恶意代码,所以我没有把它包括在这里。正如你猜到的,我的服务器被黑客攻击了,所以我需要清理所有这些JavaScript文件 我忘了提到我目前得到的结果是: sed: -e expressio

我正在尝试从Linux共享主机上的所有Javascript文件中删除2行。我想在不编写脚本的情况下实现这一点,因为我知道这应该可以通过
sed
实现。我当前的尝试如下所示:

find . -name "*.js" | xargs sed -i ";var 
O0l='=sTKpUG"
第二行实际上比这行长,但是是恶意代码,所以我没有把它包括在这里。正如你猜到的,我的服务器被黑客攻击了,所以我需要清理所有这些JavaScript文件

我忘了提到我目前得到的结果是:

sed: -e expression #1, char 4: expected newer version of sed
这两行的顺序如下:

);变量

O0l='=sTKpUG


除了第二行较长,但第二行的其余部分不应影响命令。

现在还不清楚这两行是什么样子,也不清楚它们在JavaScript中是否相邻,因此我们假设不是。然而,答案可能是:

find . -name "*.js" |
xargs sed -i -e '/^distinctive-pattern1$/d' -e '/^alternative-pattern-2a$/d'
还有其他方法可以使用单个命令字符串编写
sed
脚本;我更喜欢为单独的操作使用单独的参数(这使脚本更清晰)


显然,如果您需要在其中一行保留一些信息,可以使用适当调整的搜索模式,然后使用替换
s/short pattern/
而不是
d
来删除必须删除的短部分。与长线类似,如果相关的话。

他的意思是删除两条相邻的线

你可以这样做,记得备份你的文件

find . -name "*.js" | xargs sed  -i -e "/^;var/N;/^;var\nO0l='=sTKpUG/d"
由于sed逐行处理输入文件,因此它不会将换行符“\n”存储在其缓冲区中,因此我们需要使用flag/n将换行符附加到下一行

/^;var/N;
然后我们进行模式搜索和删除

/^;var\nO0l='=sTKpUG/d

您的
sed
命令是什么意思?我不明白。在这种情况下,
awk
可能是比
sed
更好的选择。我通常认为,在处理多行类型的情况时,
awk
更容易使用。它可能会更详细一点,但更容易理解。几乎就是这样,只是您使用的模式与我使用的模式不同,我仍然会收到一个错误:未终止的地址regex@user920840哎呀,我编辑了命令,你能检查一下它是否有效吗?我仍然收到一个错误-sed:-e表达式#1,char 300:unknown command:`8'第二行大约有1600个字符,而我正在将整个命令从记事本粘贴到putty,这有什么区别吗?您不必将整行粘贴到命令中,只需输入足够的字符,以确保只有要删除的行与模式匹配。您可以直接运行该命令,而不必关心其余的行是什么。