免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5819 | 回复: 21
打印 上一主题 下一主题

请教:如何用for实现文件批量修改 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-20 14:52 |只看该作者 |倒序浏览
各位好,问题如下:
1 在当面目录有10个文件,文件名依次为:01,02.....10。
2 每个文件里面相应的都有一个字符串为:hostname = network。
3 我的需求是将每个文件中的hostname后面的network字段修改成对应于文件名的主机名:比如说01的hostname改成:example-01.com   02的hostname改成:example-02.com
4 我的思路是用for循环来做,但是实际中遇到两个问题:

1 如何在for中表达从01依次增加到10?如果就是1到10的话很好办,直接{1..10}就可以,可我这里是01到10。

2 替换的思路:先用cat批量读取01...10,然后用sed直接把hostname字符串整行抓取替换,sed 's/hostname = network/hostname = example-$i.com/g'

请大家指点!

论坛徽章:
0
2 [报告]
发表于 2011-08-20 15:12 |只看该作者
for i in * ;do sed -i "/^hostname/s/.*/hostname = example-$i.com/" $i  ;done

论坛徽章:
0
3 [报告]
发表于 2011-08-20 15:58 |只看该作者
seq -w 10

论坛徽章:
0
4 [报告]
发表于 2011-08-20 15:59 |只看该作者
printf "%02d\n" {1..10}
都能打印出
01
...
10

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
5 [报告]
发表于 2011-08-20 16:03 |只看该作者
  1. echo {01..10}

  2. 01 02 03 04 05 06 07 08 09 10
复制代码

论坛徽章:
0
6 [报告]
发表于 2011-08-20 18:45 |只看该作者
如果就是这几个文件,for i in `ls`也可以。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
7 [报告]
发表于 2011-08-20 19:50 |只看该作者
  1. for file in [0-9]*
  2. do
  3.   sed -i "/hostname = network/ s/network/example-${file}.com/" $file
  4. done
复制代码

论坛徽章:
0
8 [报告]
发表于 2011-08-20 23:21 |只看该作者
rdcwayx 发表于 2011-08-20 16:03



    我的还是不行!

论坛徽章:
0
9 [报告]
发表于 2011-08-20 23:53 |只看该作者
for i in * ;do sed -i "/^hostname/s/.*/hostname = example-$i.com/" $i  ;done
shplpy 发表于 2011-08-20 15:12



    感谢你的指点!对我很大帮助!再请问下:sed -i "/^hostname/s/.*/hostname = example-$i.com/" $i 是不是理解成:匹配所有以hostname开头后面是任意字符的行?另外,sed下使用单引和双引的定义与shell下是一样的?因为我发现如果用单引的话$i变量就失效了。

论坛徽章:
0
10 [报告]
发表于 2011-08-20 23:55 |只看该作者
rdcwayx 发表于 2011-08-20 19:50



   帅哥,还是有问题,请看:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP