Chinaunix

标题: 如何修改文本配置行内地址? [打印本页]

作者: dogal    时间: 2015-01-21 08:49
标题: 如何修改文本配置行内地址?
本帖最后由 dogal 于 2015-01-22 17:31 编辑

例如配置文本

iop.txt只有一个 地址

192.168.1.1

要修改的配置文件serv .conf

serv{

proy ........;

ttp://192.168.2.2;

}

怎么用iop.txt里的地址替换serv.conf里 /  和 ; 之间的IP地址

sed , awk ?? 或?

谢谢大牛们。




作者: zsszss0000    时间: 2015-01-21 09:01
本帖最后由 zsszss0000 于 2015-01-21 09:15 编辑

echo "ttp://10.2.3.5;" | sed -e 's/\/.*$/\/\/10.1.2.3;/'  
作者: o枫叶o飘零    时间: 2015-01-21 09:02
sed 's/192.168.1.2/10.2.3.5/
作者: goofool    时间: 2015-01-21 09:06
本帖最后由 goofool 于 2015-01-21 09:07 编辑
  1. #ubuntu 14.04
  2. sed -r 's/[.0-9]+/1.1.1.1/'
复制代码

作者: dogal    时间: 2015-01-21 09:17
本帖最后由 dogal 于 2015-01-21 10:02 编辑

回复 3# o枫叶o飘零


上了文本



   
作者: o枫叶o飘零    时间: 2015-01-21 09:33
回复 5# dogal


   上2个文本
作者: dogal    时间: 2015-01-21 09:41
本帖最后由 dogal 于 2015-01-21 09:42 编辑

回复 2# zsszss0000

大牛,
再看看贴的内容,
帮帮忙,
你的回复比教靠近我的需求


   
作者: zsszss0000    时间: 2015-01-21 09:47
本帖最后由 zsszss0000 于 2015-01-21 09:50 编辑

大牛 当不起,我只不过刚刚开始学习sed而已。
你的需求应该是要将/和;中间的字符串给替换掉吧。
有些时候,直接把文本贴出来,并且举几个自己想要得到的例子,大家才能更好的理解你的意图回复 7# dogal


   
作者: dogal    时间: 2015-01-21 09:49
回复 8# zsszss0000

是的啊


   
作者: dogal    时间: 2015-01-21 10:11
我把贴的内容改了下

把问题提的更具体了点

大家帮帮忙啊

或者写个脚本也可以啊。
作者: liion631818    时间: 2015-01-21 10:14
  1. @ubuntu:~/bash-script$ awk 'NR==FNR{ip=$0;next}{print $0 | "sed \"s/[^/]*$/"ip";/\""}' B.txt  A.txt   
  2. ttp://10.2.3.5;
复制代码
回复 9# dogal


   
作者: dogal    时间: 2015-01-21 10:19
回复 11# liion631818


    大神,我的贴的问题改了下,更具体了点,能否在回答下,帮帮忙,
作者: Herowinter    时间: 2015-01-21 10:22
回复 1# dogal
  1. ip=`head -1 ip.txt`;sed -r "s#(ttp://).*#\1$ip;#" server.conf
  2. server{

  3. proxy ........;

  4. ttp://192.168.1.1;

  5. }
复制代码
修改原文件用sed -ri
作者: 冰谛    时间: 2015-01-21 10:37
本帖最后由 冰谛 于 2015-01-21 10:38 编辑

awk -F "/" 'BEGIN{getline < "ip.txt";a=$0";"}/ttp/{OFS="/";$NF=a}1"   server.conf
作者: dogal    时间: 2015-01-21 10:48
膜拜技术帝
作者: zxy877298415    时间: 2015-01-21 13:29
  1. awk 'FNR==NR{t=$0;next}{print gensub(/(ttp:\/\/)(.*)(;)/,"\\1" t "\\3",$0)}' ip.txt server.conf
  2. server{

  3. proxy ........;

  4. ttp://192.168.1.1;

  5. i
复制代码
回复 1# dogal


   
作者: bulletmarquis    时间: 2015-01-21 14:09
回复 12# dogal


    没看明白你的难点在什么地方
1、sed直接改写文件,使用-i
2、sed中使用要用变量,把单引改为双引即可以$var的方式导入变量
3、变量或匹配符里面有/,可以把"s/${SRC}/${TARGET}/g"改为"s#${SRC}#${TARGET}#g"
作者: Buring__    时间: 2015-01-21 14:43
回复 14# 冰谛


    刁刁的,NB
作者: A_Traveler    时间: 2015-01-21 15:20
回复 1# dogal



[root@localhost test]# cat ip.txt
192.168.1.1
[root@localhost test]# cat server.conf
server{

proxy ........;

ttp://192.168.2.2;

}
[root@localhost test]# sed -r -i '/ttp/s/[0-9.]+/'$(cat ip.txt)'/' server.conf
[root@localhost test]# cat server.conf
server{

proxy ........;

ttp://192.168.1.1;

}



   
作者: 聆雨淋夜    时间: 2015-01-21 23:14
回复 19# A_Traveler
你好,在sed内部使用单引号这种用法没见过,'$(cat ip.txt)'    能否解释一下执行过程。


   
作者: gameb_y    时间: 2015-01-22 02:05
[root@C6401 txt]# sed -r 's#(^.*://).*$#\1'$(cat ip.txt)';#g' server.conf
server{

proxy ........;

ttp://192.168.1.1;

}

作者: jason680    时间: 2015-01-22 12:43
回复 20# 聆雨淋夜

sed -r -i '/ttp/s/[0-9.]+/'$(cat ip.txt)'/' server.conf
   
作者: A_Traveler    时间: 2015-01-23 00:07
回复 20# 聆雨淋夜

首先: 并非是在sed内部使用单引;

在command执行sed语句使用单引的目的是为了将单引号内部的语句全部直接交给sed,而不让shell做任何处理;

'/ttp/s/[0-9.]+/'$(cat ip.txt)'/'   
这条语句拆分为3个部分: '/ttp/s/[0-9.]+/'
                                
                                $(cat ip.txt)

                                '/'   

shell首先处理$(cat ip.txt),转换为192.168.1.1;然后在与另外两部分一起交给sed处理;实际交给sed的语句为:/ttp/ s/[0-9.]+/192.168.1.1/  ;然后在经过sed的内部处理.


                                   
   
作者: 聆雨淋夜    时间: 2015-01-23 11:24
回复 22# jason680
看懂了,多谢  


   
作者: 聆雨淋夜    时间: 2015-01-23 11:28
回复 23# A_Traveler
解释很详细,多谢


   
作者: songyc_2015    时间: 2015-01-26 13:21
ttp://这个应该是固定的吧?

1.sed '/^ttp:\/\//c\
ttp://'`cat ip.txt`';' server.conf

2.awk 'FNR==NR{s=$0;next}/^ttp:\/\//{$0="ttp://"s";"}1' ip.txt server.conf




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2