[英]How to remove multiple lines in multiple files on Linux using bash
我正在尝试从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
除了第二行更长,但第二行的其余部分不应影响该命令。
他的意思是删除两条相邻的线。
您可以执行以下操作,请记住备份文件。
find . -name "*.js" | xargs sed -i -e "/^;var/N;/^;var\nO0l='=sTKpUG/d"
由于sed逐行处理输入文件,因此它不会在其缓冲区中存储换行符'\\ n',因此我们需要使用标志/ N来告知它以换行符附加下一行。
/^;var/N;
然后,我们进行模式搜索和删除。
/^;var\nO0l='=sTKpUG/d
目前还不清楚这两行是什么样子,也不清楚它们在JavaScript中是否彼此相邻,因此我们假设不是。 但是,答案可能是:
find . -name "*.js" |
xargs sed -i -e '/^distinctive-pattern1$/d' -e '/^alternative-pattern-2a$/d'
还有其他方法可以使用单个命令字符串编写sed
脚本。 我更喜欢对单独的操作使用单独的参数(这使脚本更清晰)。
显然,如果您需要在其中一行中保留一些信息,则可以使用适当调整的搜索模式,然后使用替代s/short-pattern//
代替d
来删除必须除去。 如果需要的话,与长线相似。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.