我试图使我更容易保持我的URL Shortener减少垃圾。当我必须经过SSH并继续向我的.htaccess添加另一行时,它变得非常乏味和烦人。因此,我想知道是否有一种方法可以轻松添加文本行,并且可以放入脚本
中示例:
<Directives here>
Order Deny,Allow
Deny from 255.255.255.255
Deny from 0.0.0.0
Deny from 1.2.3.4
<Other Directives here as well as ending Directive>
现在,我想为此添加127.0.0.1和192.168.0.1的咯咯笑声,但是由于我无法直接回应我想要的地方,所以我该如何处理。Bash或Python答案接受
使用head
,echo
和tail
的组合,您可以在原始文件上创建一个带有所需行的临时文件,然后可以使用mv
或cp
。
将Deny from 127.0.0.1
添加到您的示例.htaccess:
(head -n -1 .htaccess
echo 'Deny from 127.0.0.1'
tail -n 1 .htaccess) > .htaccess.tmp
mv -b .htaccess.tmp .htaccess
# cat .htaccess
<Directives here>
Order Deny,Allow
Deny from 255.255.255.255
Deny from 0.0.0.0
Deny from 1.2.3.4
Deny from 127.0.0.1
<Other Directives here as well as ending Directive>
head -n -1
:获取除最后一行以外的所有原始行, echo
新行, tail -n 1
:获取最后的原始行。() >
将所有内容都写入临时文件。 mv -b
覆盖原件,保存备份。
此解决方案当然假设您知道要添加新内容的文件末尾有多少行。
这是另一种方式,在sh/ksh/bash中:http://stromberg.dnsalias.org/~strombrg/contextual
sed可能是最容易使用的,几乎在任何地方可用。以下将在最后一条之前插入一行:
sed -e '$i Deny from 192.168.0.1' .htaccess
这项工作假设您想在最后一行之前插入。第二次阅读了您的问题后,我注意到您写了"&lt;其他指令在这里...&gt;"。尽管这是一个隐藏的提示,但我想您想将一行插入第一部分中的内容:
:<Directive_1>
Order Deny,Allow
Deny from 255.255.255.255
Deny from 0.0.0.0
Deny from 1.2.3.4
</Directive_1>
...
<Directive_n>
...
</Directive_n>
以下SED命令将在第一部分的关闭标签之前插入一条线:
sed -e '/^</Directive_1>$/i Deny from 192.168.0.1' .htaccess