sed替换

缘由: 需要批量修改N台db的备份脚本,把其中的一个log日志路径修改下。一个个vi进去修改太麻烦了,就想到了用sed替换命令。


 1 将文件的将/var/log/xtrabackuplog变成/mysqlbackup/$HOSTNAME/xtrabackuplog_$(date +%Y%m%d).log,原文件内容如下:

 for masterdb in `cat int.db.full`;do
   
   echo $masterdb
   ssh  $masterdb "df -h" |grep -i mysqldata;
   echo ""
   echo "Completed: `date`" >> /var/log/xtrabackuplog
   echo '';
   echo "Completed: `date`" >> /var/log/xtrabackuplog


done;

2 要将它变成如下内容:

for masterdb in `cat int.db.full`;do

   echo $masterdb
   ssh  $masterdb "df -h" |grep -i mysqldata;
   echo "" 
   echo "Completed: `date`" >>  /mysqlbackup/$HOSTNAME/xtrabackuplog_$(date +%Y%m%d).log
   echo '';
   echo "Completed: `date`" >>  /mysqlbackup/$HOSTNAME/xtrabackuplog_$(date +%Y%m%d).log


done;

3 注意里面有/目录符号,需要用\来转义。

sed命令如下:

sed -i 's/\/var\/log\/xtrabackuplog/ \/mysqlbackup\/$HOSTNAME\/xtrabackuplog_$(date +%Y%m%d).log/g' sed_t.sh 
[novamysqladminint@eanintmydbc000ctl ~]$   sed -e 's/\/var\/log\/xtrabackuplog/ \/mysqlbackup\/$HOSTNAME\/xtrabackuplog_$(date +%Y%m%d).log/g' sed_t.sh 
for masterdb in `cat int.db.full`;do

   echo $masterdb
   ssh  $masterdb "df -h" |grep -i mysqldata;
   echo "" 
   echo "Completed: `date`" >>  /mysqlbackup/$HOSTNAME/xtrabackuplog_$(date +%Y%m%d).log
   echo '';
   echo "Completed: `date`" >>  /mysqlbackup/$HOSTNAME/xtrabackuplog_$(date +%Y%m%d).log


done;


4 OK,搞定。


5 sed替换扩展部分

(1)在每一行的末尾加分号

sed 's/.*/&;/' g.sql >g1.sql
awk '{print $0,"xxxx"}' file


(2)去掉第一行记录

sed -i '1d' g1.log


(3)在每行的头添加字符,比如"HEAD",命令如下:

sed 's/^/HEAD&/g' test.file

(4)在每行的行尾添加字符,比如“TAIL”,命令如下:
sed 's/$/&TAIL/g' test.file


(5)删除检索到的行,-i在源文件上面修改

sed -i '/grant fors/d' t.file

(6)sed替换
 

sed -e 's/foo/bar/' myfile.txt  
 此命令将 myfile.txt 中每行第一次出现的 'foo'(如果有的话)用字符串 'bar' 替换,然后将该文件内容输出到标准输出。
 sed -e 's/foo/bar/g' myfile.txt 
 此命令将 myfile.txt 中每行出现的 'foo'(如果有的话)用字符串 'bar' 进行全局替换,然后将该文件内容输出到标准输出。



你可能感兴趣的:(sed替换)