1

我正在尝试从我的 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

这两行连续如下:

;var

O0l='=sTKpUG

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

4

2 回答 2

2

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

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

find . -name "*.js" | xargs sed  -i -e "/^;var/N;/^;var\nO0l='=sTKpUG/d"

由于 sed 逐行处理输入文件,它不会将换行符 '\n' 存储在其缓冲区中,因此我们需要通过使用标志 /N 来告诉它在下一行附加换行符。

/^;var/N;

然后我们进行模式搜索和删除。

/^;var\nO0l='=sTKpUG/d
于 2013-03-22T03:20:16.117 回答
0

目前还不清楚这两行是什么样的,也不清楚它们在 JavaScript 中是否彼此相邻,所以我们假设不是。然而,答案很可能是:

find . -name "*.js" |
xargs sed -i -e '/^distinctive-pattern1$/d' -e '/^alternative-pattern-2a$/d'

还有其他sed使用单个命令字符串编写脚本的方法;我更喜欢为单独的操作使用单独的参数(它使脚本更清晰)。

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

于 2013-03-22T02:20:29.837 回答