Ubuntu 9.10
嗨,大家好,
我想创build一个脚本,它将自动更新.htaccess文件中的一行。 有人可以请我指出一些创build一个基本的“查找和replace”脚本的说明吗?
我想象的东西基本上说:“寻找特殊的标记#ABC和#XYZ …删除标记之间的条目,并用'富'取代它。
你想要sed : sed -is/regex to look for/string to replace it with/
如果需要多行,你可以编写更复杂的脚本,虽然在某些时候,sed的权力和简洁性开始对付它,我宁愿开始写一个更详细,但通常可理解的脚本语言(我更喜欢Ruby ,但口味各不相同)。
如果你提供了一个你想要完成的实例,那么有人可能会提出“最好”的方法去做; 目前你的例子是一个很模糊的解决scheme。
尝试这个:
awk '/^#ABC/ {start=1; print; next} /^#XYZ/ {start=0; print "foo"; print; next} start!=1 {print}' .htaccess > .htaccess.NEW
它可以缩短为:
awk '/^#ABC/ {start=1; print; next} /^#XYZ/ {start=0; print "foo"} start!=1 {print}' .htaccess > .htaccess.NEW
如果你的文件很小(.htaccess应该是methinks),那么Perl可以“啜泣”它们,并将整个事件作为一个单独的string操作,使用s /// s(最后的's'修饰符对待整个string作为一个单一的行)。
例如:perl -i.bak -p -0 -e's /#ABC \ n。*#XYZ / foo / s'文件名列表
-i.bak告诉perl保存备份,在这种情况下称为list.bak of.bak file.bak names.bak -p -0告诉perl啜泣整个文件,-e告诉它在命令上应用正则expression式线。
这个特定版本只会replace第一组标记,如果标记完全不存在,它将不会执行任何操作(但是它仍然会创build备份文件)。