日期:2014-05-16 浏览次数:20703 次
?? 众所周知,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
??
???我这个思路肯定不是最完美的,希望大家提出更好的建议。