我正在尝试从我的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
除了第二行更长,但第二行的其余部分不应影响命令。
答案 0 :(得分:2)
他的意思是删除两条相邻的线。
你可以这样做,记得备份你的文件。
find . -name "*.js" | xargs sed -i -e "/^;var/N;/^;var\nO0l='=sTKpUG/d"
由于sed进程逐行处理输入文件,因此它不会在其缓冲区中存储换行符'\ n',因此我们需要使用flag / N来追加下一行,并带有换行符。
/^;var/N;
然后我们进行模式搜索和删除。
/^;var\nO0l='=sTKpUG/d
答案 1 :(得分:0)
目前还不清楚两条线是什么样的,并且不清楚它们是否在JavaScript中彼此相邻,所以我们假设没有。但是,答案可能是:
find . -name "*.js" |
xargs sed -i -e '/^distinctive-pattern1$/d' -e '/^alternative-pattern-2a$/d'
使用单个命令字符串编写sed
脚本还有其他方法;我更喜欢为单独的操作使用单独的参数(它使脚本更清晰)。
显然,如果您需要在其中一行上保留一些信息,可以使用适当调整的搜索模式,然后替换s/short-pattern//
而不是d
来删除必须删除的短节。与长线类似,如果那是相关的。