繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM