日期:2014-05-16  浏览次数:20640 次

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 

??

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