【转】linux批量更新文件内容+【原创】转义时的问题

程序开发中,可能你会经常遇到批量替换文件内容的情况,如果你使用的是linux,那么恭喜你,你可以使用一下三种办法进行查找替换。

方法一:

find -name ‘file.log‘ | xargs perl -pi -e ‘s|string1|string2|g‘

这里使用了perl语言,使用-e加上一段代码,从而批量地将当前目录及所有子目录下的file.log文件中的string1替换成了string2

string支持正则表达式

方法二:

sed -i "s/string1/string2/g" ‘grep string1 -rl /path‘

这里使用了sed命令,将/path目录及其子目录下的所有文件中的string1替换成了string2

这个命令,可能对返回多个文件不太支持,不太推荐!

方法三:

grep -i "string1" -r /path | awk -F : ‘{print $1}‘ | sort | uniq | xargs sed -i ‘s/string1/string2/g‘

这里使用了shell命令,先查找出文件,再用awk分割(以:切分),再行替换!

注意:

grep可以使用正则,也可以使用\转义一些特殊字符,比如“等

sed -i ‘s/\"localhost\"/\"10.2.2.2\"/g‘ /home/my.conf

-------------------------------------以上是原帖,地址:http://www.51testing.com/html/93/316693-815340.html-------------------------------------------------------

上司发现了一个sql注入的漏洞,让我批量更新所有同名文件的这个地方,where("id=‘".$rec."‘")改成where(array("编号"=>$rec))

因为我也是刚入门linux,所以马上百度方法,首先使用了sed -i "s/string1/string2/g" ‘grep string1 -rl /path‘

sed -i "s/where(\"id=‘\".\$rec.\"‘\")/where(array(\"id\"=>\$rec))/g" `grep  -rl /home`

测试,执行,成功,心里乐呵呵的在正式服务器里执行了,当时快下班了,就关了屏幕撤退了。

第二天早上打开屏幕一看,我擦,还没执行完,一想确实,那么多文件屏幕显示也费劲了,然后又百度,

因为都是同名的文件,所以这次用了 find -name ‘file.log‘ | xargs perl -pi -e ‘s|string1|string2|g‘这个方法,

中间因为转义费了好久的事,

find /home/ -name ‘xxxx.php‘ | xargs perl -pi -e "s|where\(\"id=‘\".\$rec.\"‘\"\)|where\(array(\"id\"=>\$rec\)\)|g"  -> 错误

一开始写的是 \$rec 然后就是不成功,没办法只有百度转义,发现很多博文都有些为了转义\使用5678个\来转义他自己,恍然大悟,原来\$转义出来的还是$rec还是个变量,

find /home/ -name ‘xxxx.php‘ | xargs perl -pi -e "s|where\(\"id=‘\".\\\$rec.\"‘\"\)|where\(array(\"id\"=>\\\$rec\)\)|g" -> 正确

因为从双引号里先转义了\\\$,从双引号里出来时就已经是\$了,然后命令执行时再转义成了$rec,这下终于好了,测试成功,

执行了半分钟,全部替换完毕,

时间: 2024-10-10 21:49:03

【转】linux批量更新文件内容+【原创】转义时的问题的相关文章

linux下sed批量替换文件内容

在linux超级终端下编辑文档是件比较麻烦的事情,下面简单介绍一下如何在linux下批量替换文件内容 linuxsed 批量替换多个文件中的字符串 格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 例如:替换/home下所有文件中的xxx为ooo sed -i "s/xxx/ooo/g" `grep xxx -rl /home` 单个文件中的字符串替换 将文件1.txt内的文字“111”替换成“222” sed -i &qu

linux下批量替换文件内容

linux下批量替换文件内容 1.网络上现成的资料 格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` linux sed 批量替换多个文件中的字符串 sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir` 例如:替换/home下所有文件中的www.admin99.net为admin99.net sed -i "s/www.admin99.net/a

Linux下 批量替换文件内容方法和odoo替换谷歌字体

#odoo#用中科院CDN解决odoo用到google字体速度慢问ti Linux下批量替换文件内容方法 http://www.cnblogs.com/fjping0606/p/4428850.html 1:查找find . -type f -name "*.html"|xargs grep 'yourstring' 2:查找并替换find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g' perl -pi -e在Per

用C#Winform写个简单的批量清空文件内容和删除文件的小工具

用C#Winform写个简单的批量清空文件内容和删除文件的小工具 本文介绍这个简单得不能再简单的小项目.做这个项目,有以下目的. 1 当然是做个能用的工具 2 学习使用Github 关于用VS2013创建一个项目并添加到Github的教程,请参考(http://www.admin10000.com/document/4004.html).简单来说,就是先用VS创建项目:然后在Github网站上创建一个Respo(本项目的代码托管项目),记下(https://*.git)那个地址:最后用"提交&q

sed批量替换文件内容

sed -i "s/123/456/g" `grep 123 -rl ./ | grep -v log` #把当前目录下所有文件中的123替换成456,包括子目录啊 sed批量替换文件内容

linux查看日志文件内容命令tail、cat、tac、head、echo详解

linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, ---------------------------linux 如何显示一个文件的某几行(中间几行) 从第3000行开始,显示1000行.即显示3000~3999行cat filename | tail -n +3000 | head -n 1000 显示1000行到3000行cat filename| head -

[转]linux查看日志文件内容命令

linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, ---------------------------linux 如何显示一个文件的某几行(中间几行) 从第3000行开始,显示1000行.即显示3000~3999行cat filename | tail -n +3000 | head -n 1000 显示1000行到3000行cat filename| head -

Linux下批量替换文件内容和文件名(转)

1.批量替换指定多个文件的文件内容 在指定目录/your/path里,查找包含old_string字符串的所有文件,并用new_string字符串替换old_string字符串. sed -i "s/old_string/new_string/g" `grep old_string -rl /your/path` 2.批量修改指定多个文件的文件名 在指定的路径/your/path下,查找以old_name字符串开头的所有文件,并以new_string替换掉old_string字符串.

Linux下批量替换文件内容方法

1:查找find . -type f -name "*.html"|xargs grep ‘yourstring’ 2:查找并替换find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g' perl -pi -e在Perl 命令中加上-e 选项,后跟一行代码,那它就会像运行一个普通的Perl 脚本那样运行该代码.从命令行中使用Perl 能够帮助实现一些强大的.实时的转换.认真研究正则表达式,并正确地使用,将会为您省去大量