如何找到带有模式的行并在Linux上删除它?

时间:2014-03-05 14:01:22

标签: linux cron grep crontab

我需要扫描服务器中的所有js文件并删除包含以下内容的行:

document.write("<script type='text/javascript' src='http://*

我需要每天都在cron上设置它。 我想我需要创建一个shell来完成它。

你能帮助我吗?

3 个答案:

答案 0 :(得分:1)

可能你正在寻找SED:

sed -i 's/document\.write[(]"<script type[=].text\/javascript. src[=].http:\/\/./\/\*code removed\*\//g' *.js

我的示例输入文件:

document.write("<script type='text/javascript' src='http://*
document.write("<script type='text/javascript' src='http://*
document.write("<script type='text/javascript' src='http://*
asddocument.write("<script type='text/javascript' src='http://*
document.write("<script type='text/javascript' src='http://*asd
asdasd

转变为:

/*code removed*/
/*code removed*/
/*code removed*/
asd/*code removed*/
/*code removed*/asd
asdasd

请注意,如果您想阻止网站空间上的脚本加载其他数据,那么所有这些机制都不足

这(和许多其他变种)将是一种威胁,但不符合这些模式:

var secretVariable = document;
secretVariable.write("<script type='text/javascript' src='http://some.evil.code'/>");

答案 1 :(得分:0)

如果这是确切的行,并且您想要删除整行(而不只是解析该文本),那么您可以使用egrep -v打印除匹配行之外的所有行。

egrep -v "document.write\(\"<script type='text/javascript' src='http://" oldfile > newfile

以下是处理所有.js文件的find语句:

for f in $(find /directory/path -name '*.js'); do egrep -v "document.write\(\"<script type='text/javascript' src='http://" $f > TT ; mv TT $f ; done

答案 2 :(得分:0)

perl -p -i.bak -e 's///' *.js

会做同样的事情