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

sh/bash/dash/ksh/zsh等Shell脚本
回复
cai99846
帖子: 8
注册时间: 2012-08-06 15:04

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

#1

帖子 cai99846 » 2012-08-06 15:11

修改指定文件的指定内容。
我有一个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/',就把两个都改了。
这个怎么解决。。请高手赐教。
万分感激。
funicorn
帖子: 1318
注册时间: 2005-09-13 4:56
系统: Ubuntu Jammy Jellyfi

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

#2

帖子 funicorn » 2012-08-06 15:19

参数传递
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/',就把两个都改了。
这个怎么解决。。请高手赐教。
万分感激。
头像
ljj_jjl2008
论坛版主
帖子: 14256
注册时间: 2007-09-16 8:29

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

#3

帖子 ljj_jjl2008 » 2012-08-06 15:27

我是用循环语句来实现的类似的功能:如下是我的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~

头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

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

#4

帖子 枫叶饭团 » 2012-08-06 15:28

我也是想的用read line...总感觉是“笨”办法
cai99846
帖子: 8
注册时间: 2012-08-06 15:04

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

#5

帖子 cai99846 » 2012-08-06 15:43

这个不能把新的值添加到文件的后面。第一个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/',就把两个都改了。
这个怎么解决。。请高手赐教。
万分感激。
头像
link_01
帖子: 1024
注册时间: 2008-11-05 13:24

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

#6

帖子 link_01 » 2012-08-07 9:58

这个简单
[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]
笔记
-------------------------------------
http://blog.163.com/wqt_1101
itany_2012
帖子: 7
注册时间: 2012-07-30 18:28

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

#7

帖子 itany_2012 » 2012-08-20 14:38

要发到11帖子才能回复感谢
头像
careone
帖子: 839
注册时间: 2007-12-17 21:41

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

#8

帖子 careone » 2012-08-20 15:07

建议写成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后面带文字的,避免局部被包含替换
魁拔不死,天下不宁。
魁拔既死,天下不平。
--------------
Careone <emacslocale^126.com>
https://sourceforge.net/projects/emacslocale/files/
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

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

#9

帖子 lilydjwg » 2012-08-20 15:18

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 呢?
回复