Linux shell替换文件中的内容

时间:2014-07-21 03:31:38

标签: linux shell sed

人。 有一个名为' server.conf'我想用shell来改变它的内容。 在第115行,其中有server-bridge 192.168.50.225(ip) 255.255.0.0(mask) 192.168.10.50(begin ip) 192.168.10.90(end ip) 。我想更改ipmaskbegin ipend ip。例如,我打算改变

`server-bridge 192.168.50.225 255.255.0.0  192.168.10.50 192.168.10.90` 

进入

`server-bridge 192.168.10.100 255.255.0.0  192.168.10.60 192.168.10.80` 

我应该如何处理sed或其他工具?非常感谢。

5 个答案:

答案 0 :(得分:1)

sed -i's / server-bridge \ 192.168.50.225 \ 255.255.0.0 \\ 192.168.10.50 \ 192.168.10.90/server-bridge \ 192.168.10.100 \ 255.255.0.0 \\ 192.168.10.60 \ 192.168.10.80 /'server.conf

您还可以创建一个简单的脚本,其中要替换的新值存储在$ ip ..etc .... sed -i将对文件进行编辑。

答案 1 :(得分:0)

我使用过的最好的工具是Vi。

(sudo)vi /home/mydoc.txt将打开,允许您进行所需的任何编辑。如果您以前从未使用过Vi,那么在线有一些很棒的HOW-TO和教程。这是一个:

http://www.howtogeek.com/102468/a-beginners-guide-to-editing-text-files-with-vi/

但是我鼓励你在更改你引用的文件之前真正阅读和试验测试文件,并且,请备份文件(cp /home/mydoc.txt mydoc.txt-在你做之前。您可以随时删除不起作用的已编辑文件,但在大量退出后恢复原始文件可能会令人头疼。

答案 2 :(得分:0)

你可以使用sed这样做,例如这样的事情 注意:\ sed Intro

会转义每个空格
   cat server.conf | sed 's/server-bridge\ 192.168.50.225\ 255.255.0.0\ \ 192.168.10.50\ 192.168.10.90/server-bridge\ 192.168.10.100 255.255.0.0\ \ 192.168.10.60\ 192.168.10.80/' > server.conf

或者您可以使用两个文件来保证安全,例如

cat server.conf | sed 's/server-bridge\ 192.168.50.225\ 255.255.0.0\ \ 192.168.10.50\ 192.168.10.90/server-bridge\ 192.168.10.100 255.255.0.0\ \ 192.168.10.60\ 192.168.10.80/' > server.conf.bak
cat server.conf.bak > server.conf

答案 3 :(得分:0)

你可以使用这个awk:

awk -v ip='192.168.10.100' -v mask='255.255.0.0' -v bip='192.168.10.60' \
 -v eip='192.168.10.80' '/server-bridge/{$2=ip "(ip)"; $3=mask "(mask)"; $4=bip "(begin";
 $6=eip "(end"} 1' server.conf

答案 4 :(得分:0)

使用sed更改包含server-bridge的所有行:

sed -i -e '/^server-bridge/!b' \
    -e 'c server-bridge 192.168.10.100 255.255.0.0  192.168.10.60 192.168.10.80' input

仅更改第115行:

sed -i -e '115!b' \
    -e 'c server-bridge 192.168.10.100 255.255.0.0  192.168.10.60 192.168.10.80' input