首页 > 自动化运维 > Shell > shell脚本之批量处理文件
2015
05-14

shell脚本之批量处理文件

   昨天在群里有朋友求助希望能从name.ini中按要求提取字符串并在另一个文件中生成特定的行,本人虽水平有限,但本着无兄弟不脚本的原则,冒着被虐的风险试着写了一下。

 以下是name.ini文件的样本。

 [root@cmb ~]# cat /mnt/name.ini 
cs_ins_s123
cs_ins_s124
cs_log_s123
cs_log_s124
hf_ins_s123
hf_ins_s124
hf_log_s123
hf_log_s124

 要求

     1:生成文件xxx.ini,xxx为上例name.ini中的123和124。

     2:xxx.ini的格式如下

   [root@cmb ~]# cat /mnt/123.ini 

    db1=jdbc:mysql://127.0.0.1:3306/cs_ins_s123
    db1=jdbc:mysql://127.0.0.1:3306/cs_log_s123
    db2=jdbc:mysql://127.0.0.1:3306/hf_ins_s123
    db2=jdbc:mysql://127.0.0.1:3306/hf_log_s123

解决思路

 1:使用sed 取得生成文件的名称"123".

 2:使用grep筛选并给变量赋值.

 3:使用判断语句将hf_log_s123 hf_ins_s123 cs_ins_s123 cs_log_s123保存到"123.ini"中.

 4:“前缀”+提取值 追加到 文件 xxx.ini中。

#!/bin/bash
#sb
A='/mnt/name.ini'
db1='db1=jdbc:mysql://127.0.0.1:3306/'
db2='db2=jdbc:mysql://127.0.0.1:3306/'
#dblog1='dblog1=jdbc:mysql://127.0.0.1:3306/'
#dblog2='dblog1=jdbc:mysql://127.0.0.1:3306/'

for I in $(cat $A);
do
  num=`echo $I | sed 's/[^0-9]//g'`
  
  csi=`echo $I |grep "cs_ins"`
  clog=`echo $I | grep "cs_log"`
  hfi=`echo $I | grep "hf_ins"`
  hlog=`echo $I | grep "hf_log"`
  if [ ! $csi == "" ];then
     echo "$db1$I" >> /mnt/$num.ini 
  elif [ ! $clog == "" ];then
     echo "$db1$I" >> /mnt/$num.ini
  elif [ ! $hfi == "" ];then
     echo "$db2$I" >> /mnt/$num.ini
  elif [ ! $hlog == "" ];then
     echo "$db2$I" >> /mnt/$num.ini
  else
     echo "Nothing to do!"
  fi
done




最后编辑:
作者:wood-man
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

留下一个回复