免费注册 查看新帖 |

Chinaunix

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

sed替换文件内容问题,请教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-17 11:06 |只看该作者 |倒序浏览
10可用积分
文件list 有  
pay::
   $(paybin)/        dest=/home/admin/bin/
文件 jncfagent.conf 有
pay::   
   $(paybin)/        dest=/home/admin/

其中list 文件的哪个路径可能会发生变化pay:: 下面的路径,所以我想用脚本去检测list pay:: 的路径然后替换到jncfagent.conf 文件里pay:: 下面的路径,谁能告诉我该怎么实

现呢?
感激不禁那...这个问题已经捆饶了我多时了.........



文件jncfagent.conf是一个很重要的配置文件. 现在有个人需要进行修改,但权限有限,我不能让他进行修改所有的内容, 所以我建立了另一个文件,让他在里面把相应的路径和文件

名写进A文件,然后我用脚本定期做内容替换就可以了.

# cat for.sh
#!/bin/sh
list=`cat list`


case $list in

"pay::" )
paylist=`awk '/pay::/{getline;print}'` list;
jnpay=`awk '/pay::/{getline;print}'` jncfagent.conf;
???????????????这里该怎么做替换呢?  sed -i 应该可以的,但是我对sed不是很懂.

esac

最佳答案

查看完整内容

如果是整行替换,修改脚本:

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
2 [报告]
发表于 2008-12-17 11:06 |只看该作者
如果是整行替换,修改脚本:

  1. #! /bin/bash


  2. payDir=$(sed -n '/pay/{n;p}' $1)
  3. tradeDir=$(sed -n '/trade/{n;p}' $1)

  4. sed -i "/pay/{n;s,.*,$payDir,};/trade/{n;s,.*,$tradeDir,}" $2
复制代码

$ cat list.txt
list的文件内容:
pay::
$(paybin)/pay          dest=/home/admin/jnbin/paybin
trade::
$(tradebin)/trade        dest=/home/admin/jnbin/tradebin/


$ cat jncfagent.conf
pay::
$(paybin)/         dest=/home/admin/jnbin/
trade::
$(tradebin)/        dest=/home/admin/jnbin/tradebin/


$ ./bsh7.sh list.txt jncfagent.conf

$ cat jncfagent.conf
pay::
$(paybin)/pay          dest=/home/admin/jnbin/paybin
trade::
$(tradebin)/trade        dest=/home/admin/jnbin/tradebin/

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
3 [报告]
发表于 2008-12-17 11:18 |只看该作者

回复 #1 zhangheng520 的帖子

用list中的dest=/home/admin/bin/替换jncfagent.conf 中的dest?

论坛徽章:
0
4 [报告]
发表于 2008-12-17 11:19 |只看该作者
pt=`grep paybin list | awk -F\= '{print $2}'`


如果jncfagent.conf里面只包含一行dest=的话

sed -i "s/dest=.*/dest=$pt/" jncfagent.conf

论坛徽章:
0
5 [报告]
发表于 2008-12-17 11:26 |只看该作者
list 的内容
# cat list
pay::
$(paybin)/          dest=/home/admin/
trade::
$(tradebin)/        dest=/home/admin/tradebin/



jncfagent.conf的内容:

pay::
           $(paybin)/        dest=/home/admin/bin/
trade::
$(tradebin)/        dest=/home/admin/tradebin/


要将list  pay::    trade::  下面的路径全部替换过来到jncfagent.conf 相对的目录.

论坛徽章:
1
2015年亚洲杯之韩国
日期:2015-04-24 09:07:02
6 [报告]
发表于 2008-12-17 11:27 |只看该作者
awk 'NR==FNR {if($1~/paybin/) su=$2} NR!=FNR{if($1~/paybin/) $2=su}' list jncfagent.conf 行吗?

论坛徽章:
0
7 [报告]
发表于 2008-12-17 11:35 |只看该作者
awk 'NR==FNR {if($1~/paybin/) su=$2} NR!=FNR{if($1~/paybin/) $2=su}' list jncfagent.conf

不行的...
其实我的要求很简单,就是搜索list 文件下的pay:: 下面的那整条路径,然后替换到 jncfagent.conf文件 pay:: 下面的路径里,替换原来的路径.......

论坛徽章:
0
8 [报告]
发表于 2008-12-17 11:40 |只看该作者
理解错误

[ 本帖最后由 smallstar001 于 2008-12-17 11:41 编辑 ]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
9 [报告]
发表于 2008-12-17 11:40 |只看该作者

回复 #6 zhangheng520 的帖子

现在才发现LZ已经发过另外的贴子了。
try:
./sub.sh list jncfagent.conf


sub.sh
  1. #! /bin/bash

  2. payDir=$(sed -n '/pay/{n;s/.*dest=//p}' $1)
  3. tradeDir=$(sed -n '/trade/{n;s/.*dest=//p}' $1)

  4. sed -i "/pay/{n;s,dest=.*,dest=$payDir,};/trade/{n;s,dest=.*,dest=$tradeDir,}" $2
复制代码

论坛徽章:
0
10 [报告]
发表于 2008-12-17 11:47 |只看该作者
#! /bin/bash

payDir=$(sed -n '/pay/{n;s/.*dest=//p}' $1)
tradeDir=$(sed -n '/trade/{n;s/.*dest=//p}' $1)

sed -i "/pay/{n;s,dest=.*,dest=$payDir,};/trade/{n;s,dest=.*,dest=$tradeDir,}" $2


这个是可以替换dest=的.但是要替换所有的呢?》 包括前面的.......



另外如何将脚本和case结合起来呢?

比如case

cat list   如果有pay::的话就  替换 pay:: 下面的.,  trade就替换trade::下面的目录呢 ?????
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP