写入bash或python中的特定行

时间:2014-01-26 19:54:13

标签: python apache bash .htaccess

我正在努力让我更容易保持我的网址缩短程度。当我必须通过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答案

3 个答案:

答案 0 :(得分:0)

sed可能是最容易使用的,几乎无处不在。以下内容将在最后一行之前插入一行:

sed -e '$i Deny from 192.168.0.1' .htaccess

这可以假设你想在最后一行之前插入。第二次读到你的问题后,我注意到你写了“&lt; Other Directives here ...&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

答案 1 :(得分:0)

这是另一种方式,在sh / ksh / bash中: http://stromberg.dnsalias.org/~strombrg/contextual

答案 2 :(得分:0)

使用headechotail的组合,您可以创建包含所需行的临时文件,然后mvcp结束原始文件。

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覆盖原始文件,保存备份。

当然,此解决方案假设您知道要添加新内容的文件末尾有多少行。