Shell脚本 – 如何replace线

Ubuntu 9.10

嗨,大家好,

我想创build一个脚本,它将自动更新.htaccess文件中的一行。 有人可以请我指出一些创build一个基本的“查找和replace”脚本的说明吗?

我想象的东西基本上说:“寻找特殊的标记#ABC和#XYZ …删除标记之间的条目,并用'富'取代它。

你想要sedsed -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备份文件)。