Linux sed命令浅析

   众所周知,sed命令(更精确的说,它是一个函数)有很强大的作用。这里结合自己的工程,讲一个简单的应用。

   假定这里有一个文本,记载了本地可以允许访问的IP。

   文本名为ip.conf,记载内容为ip="",如果允许1.1.1.1访问,则应该是ip="1.1.1.1 "(以此类推)

   下面演示一个利用sed命令来改变它,假如要假如1.2.3.4这个IP,则需要输入:

   

sed -i "/^ip/s/\"$/ 1.2.3.4\"/g" ip.conf 

    输入以上命令后,现在文本内容应该变成ip="1.1.1.1 1.2.3.4"

    假如要删除1.2.3.4,则应该输入:

   

sed -i "/^ip/s/ 1.2.3.4\"//g" ip.conf

    输入这个命令后,文本内容应该变成了ip="1.1.1.1"

    下面介绍下sed的一种常用方式(这里只讨论sed用于更改文本内容的用法),以及上述做法的思路。

     :

     -i 参数表示处于文本编辑模式

     /^ip/表示一个正则表达式,表示寻找以ip开头的文本行

    接下来的s表示这是一个替换的操作,其格式为:

   

s/patten-to-find/pattern-to-replace/[g p w n]

    其中pattern-to-find用于寻找要匹配的地方 而pattern-to-replace表示要替换的样子 

    结尾的g表示全局匹配 p

    缺省sed将所有被替换行写入标准输出,加p选项将使-n选项无效。-n选项不打印输出结果。

    w 文件名  使用此选项模式将输出重定向到一个文件

  

   接下来讲下我的思路 在插入一个IP的时候,寻找ip开头的文本行的最末尾的"(双引号),然后将"替换成**.**.**.** "

   在删除一个IP的时候,将**.**.**.** "替换成"

   这里还可以做进一步的改进,引入&命令(它保存了被寻找要改的模式),例如添加IP的地方可以这样做:

  

sed -i "/^ip/s/\"$/ 1.2.3.4 &/g" ip.conf 

  

   我这个思路肯定不是最完美的,希望大家提出更好的建议。

猜你喜欢

转载自bestchenwu.iteye.com/blog/1069722