linux 批量查找与替换

1: linux 批量查找与替换

https://www.cnblogs.com/kongzhongqijing/articles/8459069.html

 

2: Linux xargs 命令

https://www.runoob.com/linux/linux-comm-xargs.html

3:  Linux 命令大全

https://www.runoob.com/linux/linux-command-manual.html

 

 

批量查找指定字符并替换。

1、sed与grep配合

格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径`  

或者  grep -rl 查找字段  路径|xargs sed -i "s/查找字段/替换字段/g" 

grep -r 指定目录递归查找

 

实例:

sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`

sed -i "s/www.admin99.net/admin99.net/g" `grep www.admin99.net -rl /home`    #替换/home下所有文件中的www.admin99.net为admin99.net

exp:sed -i "s/shabi/$/g" `grep shabi -rl ./`

或者

grep -rl matchstring somedir/ | xargs sed -i 's/string1/string2/g'  

grep -rl 'windows' ./path | xargs sed -i 's/windows/linux/g' 

 

sed -i 's/old-word/new-word/g' *.txt 

sed 's/old/new/g' input.txt > output.txt 

将文件1.txt内的文字“garden”替换成“mirGarden”

  # sed -i "s/garden/mirGarden/g" 1.txt   //sed -i 很简单

将当前目录下的所有文件内的“garden”替换成“mirGarden”

  ## sed -i "s/garden/mirGarden/g" `ls` //其实也就是ls出多个文件名而已

复制代码

#!/bin/bash  
OLD="xyz"  
NEW="abc"  
DPATH="/home/you/foo/*.txt"  
BPATH="/home/you/bakup/foo"  
TFILE="/tmp/out.tmp.$$"  
[ ! -d $BPATH ] && mkdir -p $BPATH || :  
for f in $DPATH  
do  
  if [ -f $f -a -r $f ]; then  
    /bin/cp -f $f $BPATH  
   sed "s/$OLD/$NEW/g" "$f" > $TFILE && mv $TFILE "$f"  
  else  
   echo "Error: Cannot read $f"  
  fi  
done  
/bin/rm $TFILE 

复制代码

 

2、find

命令格式:find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g' 

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

 

#查找替换当前目录下包含字符串并进行替换

find -name '*.txt' | xargs perl -pi -e 's|智慧乡村|北部山区|g'

#递归查找替换

find . -type f -name '*.html' | xargs perl -pi -e 's|智慧乡村|北部山区|g'

 

3. awk

grep -i "windows" -r ./path | awk -F : '{print $1}' | sort | uniq | xargs sed -i 's/windows/linux/g'  

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

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

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

 

linux下查找某目录下所有文件包含某字符串的命令

复制代码

#从文件内容查找匹配指定字符串的行:  
$ grep "被查找的字符串" 文件名  
  
#从文件内容查找与正则表达式匹配的行:  
$ grep –e “正则表达式” 文件名  
  
#查找时不区分大小写:  
$ grep –i "被查找的字符串" 文件名  
  
#查找匹配的行数:  
$ grep -c "被查找的字符串" 文件名  
  
#从文件内容查找不匹配指定字符串的行:  
$ grep –v "被查找的字符串" 文件名  
  
#从根目录开始查找所有扩展名为.txt的文本文件,并找出包含"linux"的行  
find . -type f -name "*.txt" | xargs grep "linux" 

复制代码

 

 

 

参考资料:

http://www.cyberciti.biz/faq/unix-linux-replace-string-words-in-many-files/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值