本随笔仅对sed命令的强大的文件内容替换功能做了实例,sed命令详解请见博客:http://www.cnblogs.com/edwardlost/archive/2010/09/17/1829145.html
文件内容:
[ZONE1] key1=value1 key2=value2 key3=value3 [ZONE2] key1=value1 key2=value2 key3=value3 [ZONE3] key1=value1 key2=value2 key3=value3 [ZONE4] key1=value1 key2=value2 key3=value3
域ZONE1所在行号 :
sed -n "/^\[ZONE1\]$/=" filename
简单替换(不会修改源文件):
sed 's/^key1=value1/key1=newvalue/' filename
将文件中所有key1=value1替换成key1=newvalue :
sed -i "s/^key1=.*/key1=newvalue/" filename
将文件3到5行中的key1=value1替换成key1=newvalue:
sed -i "3,5s/^key1=.*/key1=newvalue/" filename
域ZONE1所在行开始向下count(N;)行中key1=value1替换成key1=newvalue,N;的个数有多少个即可向下匹配多少行:
sed -i "/^\[ZONE1\]$/{N;N;s/^key1=.*/key1=newvalue/}" filename
域ZONE1到下一个域(以中括号开头的)之间的key1=value1替换成key1=newvalue:
sed -i "/^\[ZONE1]$/,/^\[.*]$/s/^key1=.*/key1=newvalue/" filename
一次替换文件中多个不同内容:
sed -i 's/^key1=value1/key1=newvalue/' -i 's/^key2=value2/key2=newvalue2/' filename
sed -n "/\[MYSQLD\]/,/\[.*\]/ s/connectstring/connectstring/p" datanode_my.conf