分页: 1 / 1

shell脚本修改指定文件的内容

发表于 : 2012-08-06 15:11
cai99846
修改指定文件的指定内容。
我有一个ini的配置文件,需要根据需要进行修改。
[HDBPLUGIN]
ComputerName= ;RTDB服务器机器名
IPA = 172.26.16.25
IPB = ; RTDB服务器IP地址B
IsLog = 0 ;是否输出日志,0为不输出;1为输出。其它值无效,默认为0.
PollingTime = 1000 ;向数据库请求数据的轮询周期,单位为毫秒 ; RTDB服务器IP地址A

;RTDB
[RTDBPLUGIN]
ComputerName=
IPA=172.26.35.195
IPB=
IsLog=0
PollingTime=1000

如上述内容,含有两个IPA和IPB。这两个值在实际有可能是不一样的。请问怎么进行修改。
使用find -name aa.ini | xargs sed -i 's/IPA=/IPA=172.2.2.2/',就把两个都改了。
这个怎么解决。。请高手赐教。
万分感激。

Re: shell脚本修改指定文件的内容

发表于 : 2012-08-06 15:19
funicorn
参数传递
cai99846 写了:修改指定文件的指定内容。
我有一个ini的配置文件,需要根据需要进行修改。
[HDBPLUGIN]
ComputerName= ;RTDB服务器机器名
IPA = 172.26.16.25
IPB = ; RTDB服务器IP地址B
IsLog = 0 ;是否输出日志,0为不输出;1为输出。其它值无效,默认为0.
PollingTime = 1000 ;向数据库请求数据的轮询周期,单位为毫秒 ; RTDB服务器IP地址A

;RTDB
[RTDBPLUGIN]
ComputerName=
IPA=172.26.35.195
IPB=
IsLog=0
PollingTime=1000

如上述内容,含有两个IPA和IPB。这两个值在实际有可能是不一样的。请问怎么进行修改。
使用find -name aa.ini | xargs sed -i 's/IPA=/IPA=172.2.2.2/',就把两个都改了。
这个怎么解决。。请高手赐教。
万分感激。

Re: shell脚本修改指定文件的内容

发表于 : 2012-08-06 15:27
ljj_jjl2008
我是用循环语句来实现的类似的功能:如下是我的shell的一部分,供参考。

代码: 全选

    s_text1="windows_where"
    s_text2="no_bord_where"
    i_text1="windows_where:0,$s_l,0,$[ $w - $s_l ],$[ $h - 40 ]"
    i_text2="no_bord_where:0,$s_l,0,$[ $w - $s_l + 4 ],$[ $h - 14 ]"

    cp ~/.icon-DE/wharf.rc ~/.icon-DE/wharf.rc~
    cp /dev/null ~/.icon-DE/wharf.rc
    while read LINE
    do
        s_include1=`echo "$LINE" |grep -q "$s_text1" && echo "1" ||echo "0"`
        if [ $s_include1 == "0" ]; then
			s_include2=`echo "$LINE" |grep -q "$s_text1" && echo "1" ||echo "0"`
			if [ $s_include2 == "0" ]; then
				echo $LINE >> ~/.icon-DE/wharf.rc
			else
				echo $i_text2 >> ~/.icon-DE/wharf.rc
			fi
        else
            echo $i_text1 >> ~/.icon-DE/wharf.rc
        fi
    done < ~/.icon-DE/wharf.rc~


Re: shell脚本修改指定文件的内容

发表于 : 2012-08-06 15:28
枫叶饭团
我也是想的用read line...总感觉是“笨”办法

Re: shell脚本修改指定文件的内容

发表于 : 2012-08-06 15:43
cai99846
这个不能把新的值添加到文件的后面。第一个IPA属于[HDBPLUGIN],第二个IPA属于[RTDBPLUGIN]。如果都追加到文件后面的话,就都变成[RTDBPLUGIN]的了。
cai99846 写了:修改指定文件的指定内容。
我有一个ini的配置文件,需要根据需要进行修改。
[HDBPLUGIN]
ComputerName= ;RTDB服务器机器名
IPA = 172.26.16.25
IPB = ; RTDB服务器IP地址B
IsLog = 0 ;是否输出日志,0为不输出;1为输出。其它值无效,默认为0.
PollingTime = 1000 ;向数据库请求数据的轮询周期,单位为毫秒 ; RTDB服务器IP地址A

;RTDB
[RTDBPLUGIN]
ComputerName=
IPA=172.26.35.195
IPB=
IsLog=0
PollingTime=1000

如上述内容,含有两个IPA和IPB。这两个值在实际有可能是不一样的。请问怎么进行修改。
使用find -name aa.ini | xargs sed -i 's/IPA=/IPA=172.2.2.2/',就把两个都改了。
这个怎么解决。。请高手赐教。
万分感激。

Re: shell脚本修改指定文件的内容

发表于 : 2012-08-07 9:58
link_01
这个简单
[bash]
echo '[HDBPLUGIN]
ComputerName= ;RTDB服务器机器名
IPA = 172.26.16.25
IPB = ; RTDB服务器IP地址B
IsLog = 0 ;是否输出日志,0为不输出;1为输出。其它值无效,默认为0.
PollingTime = 1000 ;向数据库请求数据的轮询周期,单位为毫秒 ; RTDB服务器IP地址A

;RTDB
[RTDBPLUGIN]
ComputerName=
IPA=172.26.35.195
IPB=
IsLog=0
PollingTime=1000' |sed -r '/HDBPLUGIN/,+3 s/IPA \s?= \t?.*/IPA = 10.0.0.1/;/RTDBPLUGIN/,+3 s/IPA\s?=\s?.*/IPA = 10.0.0.2/'
[/bash]

Re: shell脚本修改指定文件的内容

发表于 : 2012-08-20 14:38
itany_2012
要发到11帖子才能回复感谢

Re: shell脚本修改指定文件的内容

发表于 : 2012-08-20 15:07
careone
建议写成2 行sed

代码: 全选

sed -i 's/IPA = 172.26.16.25/IPA=172.2.2.2/g' aa.ini
sed -i 's/IPA=/IPA=172.2.2.2/g' aa.ini
注意
× 留意下 ini 文件内部的写法,前后两个 IPA 和等号前后是否有空格,保证完全匹配

× 留意这两行 sed 的先后执行顺序,先执行文字多的,最后执行 IPA后面带文字的,避免局部被包含替换

Re: shell脚本修改指定文件的内容

发表于 : 2012-08-20 15:18
lilydjwg
careone 写了:建议写成2 行sed

代码: 全选

sed -i 's/IPA = 172.26.16.25/IPA=172.2.2.2/g' aa.ini
sed -i 's/IPA=/IPA=172.2.2.2/g' aa.ini
注意
× 留意下 ini 文件内部的写法,前后两个 IPA 和等号前后是否有空格,保证完全匹配

× 留意这两行 sed 的先后执行顺序,先执行文字多的,最后执行 IPA后面带文字的,避免局部被包含替换
为什么要用两行 sed 呢?