Linux中对文本文件批量替换
(有关html语句部分成功替换 实例:下)
在linux系统上,可以使用命令ls -1 | xargs perl –I –p –e ‘s/替换后/替换前/’
sed 's/a/b/' /etc/passwd 将第1个a替换成b,g表明全局替换
sed -n ‘2p’ /etc/passwd 打印出第2行,p结合-n使用
sed -n ‘1,3p’ /etc/passwd 打印出第1到第3行
sed -e '1,10d' -e 's/yellow/black/g' x.txt :将x.txt中1~10行内容删除,
并将其它内容中的yellow替换为black
sed -e 's/yellow/blue/g' white.dat red.dat black.dat :
替换 white.dat、red.dat、black.dat 档内的 "yellow" 字串成 "blue"
任务:将文本hello中第一次出现的hello替换为wang,第二次出现的替换为yao
思路:
1.采用sed.
将模式空间(pattern space)的内容暂存入驻留空间(hold space).再将驻留空间的内容转入模式空间。(注:模式空间是单行的,采用它的多航模式,将内容存入驻留空间,使全部文本存入驻留空间,再拷贝回模式空间,进行替换操作)
2.采用awk.
设置RS(记录分割符)为""(空,即EOF),使全部文本变为一个记录,再进行字段操作,按照要求将字段进行替换。
#!/bin/sh
sed '{NH}g
s/\n//
s/hello/wang/1
s/hello/yao/g' $1
#!/bin/sh -f
awk '
BEGIN{FS=" ";RS=""}
{sub(/hello/,"wang")
gsub(/hello/,"yao")
}
END{print $0}' $1
1、网络上现成的资料
格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径`
linux sed 批量替换多个文件中的字符串
sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`
例如:替换/home下所有文件中的为admin99.net
sed -i "s//admin99.net/g" `grep -rl /home`
exp:sed -i "s/shabi/$/g" `grep shabi -rl ./`
2、自己额外附加
2.1 将文件1.txt内的文字“garden”替换成“mirGarden”
# sed -i "s/garden/mirGarden/g" 1.txt //sed -i 很简单
2.2 将当前目录下的所有文件内的“garden”替换成“mirGarden”
## sed -i "s/garden/mirGarden/g" `ls` //其实也就是ls出多个文件名而已
find . -type f -exec sed -i '1,10s/string1/string2/g' {} \;
这个管用,将目录下所有文件(包括子目录的文件)中的string1替换成string2,不管文件是否有后缀名.
高级用法加perl,批量替换文件名为file.php的文件里面的某些内容:
find -name 'file.php' | xargs perl -pi -e "s|原内容|要替换的内容|g"
这里给出一个简单的shell命令,可以一次性将所有文件中的指定字符串进行修改:
grep "abc" * -R | awk -F: '{print $1}' | sort | uniq | xargs sed -i 's/abc/abcde/g'
替换字符:sed -i "s/old/new/g" /test
查找包含指定字符的文件名:grep aaa –ul /test
例一:
这两天在构建一个运用 的运用用到了maven,由于project很大,足足有700多个pom.xml文件,更郁闷的是在很多pom.xml文件里都单独指定了资源库的 url,我须要把这些资源库的url统一指定到nexus本地中央库.
手工一个个改文件配置有点不太实际,所以google了一下,找到批量替换文件内容的好要领 ,命令结构如下:
find -name ‘要查找的文件名’ xargs perl -pi -e ‘被替换的字符串替换后的字符串g’
下面这个例子就是将当前目录及所有子目录下的所有pom.xml文件中的”“替换为”“.
find -name ‘pom.xml’ xargs perl -pi -e ’sg’
这里用到了Perl语言,
perl -pi -e
在Perl 命令中加上-e 选项,后跟一行代码,那它就会像运行一个普通的Perl 脚本那样运行该代码.
从命令行中运用 Perl 能够帮助实现一些强大的、实时的转换。认真研究正则表达式,并正确地运用,将会为您省去大量的手工编辑工作。
例二:
常常查找匹配或替换多个文件中的关键字,可以用sed也可以用perl
sed -i -e ’s/aaa/bbb/g’ *
perl -p -i -e ’s/aaa/bbb/g’ *
或者用find传递参数
find ./ -name “*html” | xargs -n 1 sed -i -e ’s/aaa/bbb/g’
例三:
假如要将当前目录下的所有文件中的windows替换成linux,可以执行
find -type f | xargs perl -i -pe s%windows%linux%g
如果要匹配一个特定的参数,可以用perl,例如
perl -0ne ‘print “$2\t $1 ” while (/([^<]*)<\/a>/g)’ *.html
高级实例:
替换为:
[root@web1 yule]# sed -i "s###g" *html
替换仅限于 html目录和tools目录里的静态网页
改为:
改为:
[root@web1 yule]# sed -i "s###g" *html
[root@web1 yule]# sed -i "s###g" *html
[root@web1 yule]#
/chacha8/news/news/html
/chacha8/news/news/tools
目录下所有html页面 替换
替换之前,也做个备份?
=================
[root@web1 yule]# sed -i "s#
[root@web1 yule]# sed -i "s#
[root@web1 yule]#
[root@web1 yule]# cat index.html |grep ""
[root@web1 yule]# cat index.html |grep head
[root@web1 yule]#
[root@web1 yule]# sed -i "s###g" index.html
[root@web1 yule]#
[root@web1 yule]# cat index.html |grep head
=====================================
[root@web1 yule]# find /chacha8/news/news/html/yule -name "*.html" | xargs perl -pi -e "s|||g"
[root@web1 yule]#
[root@web1 yule]# find /chacha8/news/news/html/yule -name "*.html" | xargs perl -pi -e "s|||g"
[root@web1 yule]#
[root@web1 yule]# find /chacha8/news/news/html/yule -name "*.html" | xargs perl -pi -e "s|||g"
[root@web1 yule]#
[root@web1 yule]# pwd
/chacha8/news/news/html/yule
[root@web1 yule]#
[root@web1 yule]# find /chacha8/news/news/html/yule -name "*.html" | xargs sed -i "s###g"
[root@web1 yule]#
[root@web1 yule]# find /chacha8/news/news/html/yule -name "*.html" | xargs sed -i "s###g"
[root@web1 yule]#
[root@web1 html]# find /chacha8/news/news/tools/ -name "*.html" | xargs sed -i "s#"
[root@web1 html]#
[root@web1 html]# find /chacha8/news/news/html/ -name "*.html" | xargs sed -i "s#"
[root@web1 html]#
[root@web1 html]# find /chacha8/news/news/jiaotong/ -name "*.html" | xargs sed -i "s#"
[root@web1 html]#
[root@web1 tools]# find /chacha8/news/news/tools -name "*.html" | xargs chmod -R 666 <--修改所有tools目录下和子目录的.html文件 权限为 666