linux批量替换⽂件内容3种⽅法(perl,sed,shell)
linux批量替换⽂件内容3种⽅法(perl,sed,shell)
⽅法1:
这两天在构建⼀个应⽤的使⽤⽤到了maven,由于project很⼤,⾜⾜有700多个 l⽂件,更郁闷的是在很多l⽂件⾥都单独指定了资源库的url,我需要把这些资源库的url统⼀指定到nexus本地中央库.
⼿⼯⼀个个改⽂件配置有点不太实际,所以google了⼀下,到批量替换⽂件内容的好⽅法,命令结构如下:
find -name '要查的⽂件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g'下⾯这个例⼦就是将当前⽬录及所有⼦⽬录下的所有l⽂件中的”/maven2“ 替换为
”localhost:8081/nexus/content/groups/public“.find -name 'l' | xargs perl -pi -e
's|/maven2|localhost:8081/nexus/content /groups/public|g'这⾥⽤到了Perl语⾔,perl -pi -e 在Perl 命令中加上-e 选项,后跟⼀⾏代码,那它就会像运⾏⼀个普通的Perl 脚本那样运⾏该代码.从命令⾏中使⽤Perl 能够帮助实现⼀些强⼤的、实时的转换。认真研究正则表达式,并正确地使⽤,将会为您省去⼤量的⼿⼯编辑⼯作。
find -name 'l' | xargs perl -pi -e 's|/maven2|localhost:8081/nexus/content/groups/public|g'
⽅法2:
Linux下批量替换多个⽂件中的字符串的简单⽅法。⽤sed命令可以批量替换多个⽂件中的字符串。
⽤sed命令可以批量替换多个⽂件中的字符串。
sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在⽬录`
例如:我要把mahuinan替换为huinanma,执⾏命令:linux怎么读取文件内容
sed -i "s/mahuinan/huinanma/g" 'grep mahuinan -rl /www'
这是⽬前linux最简单的批量替换字符串命令了!
具体格式如下:
sed -i "s/oldString/newString/g"  `grep oldString -rl /path`
实例代码:sed -i "s/⼤⼩多少/⽇⽉⽔⽕/g" `grep ⼤⼩多少 -rl /usr/aa`
sed -i "s/⼤⼩多少/⽇⽉⽔⽕/g" `grep ⼤⼩多少 -rl ./`
⽅法3:
在⽇程的开发过程中,可能⼤家会遇到将某个变量名修改为另⼀个变量名的情况,如果这个变量是⼀个局部变量的话,vi⾜以胜任,但是如果是某个全局变量的话,并且在很多⽂件中进⾏了使⽤,这个时候使⽤vi就是⼀个不明智的选择。这⾥给出⼀个简单的shell命令,可以⼀次性将所有⽂件中的指定字符串进⾏修改:
grep "abc" * -R | awk -F: '{print $1}' | sort | uniq | xargs sed -i 's/abc/abcde/g'
批量替换配置⽂件中的IP:
grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" * -R | awk -F: '{print $1}' |  sort | uniq | xargs sed -i 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/172\.0\.0\.1/g'
补充说明:sed -i "s/oldString/newString/g"  `grep oldString -rl /path`    对多个⽂件的处理可能不⽀持,需要⽤ xargs, 搞定。变种如下:grepoldString -rl /path | xargssed -i "s/oldString/newString/g"注意:在  `grep oldString -rl /path`  中 ` 为1前边的翻引号`,⽽不是enter 前的 '

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。