【问题标题】:Write to specific line in bash or python写入 bash 或 python 中的特定行
【发布时间】:2014-01-26 19:54:13
【问题描述】:

我正在努力让我的网址缩短器更容易减少垃圾邮件。当我必须通过 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 答案

【问题讨论】:

标签: python apache bash .htaccess


【解决方案1】:

使用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:获取最后一个原始行。 () &gt; 将所有内容写入临时文件。 mv -b 覆盖原始文件,保存备份。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      假设您要在最后一行之前插入,则此方法有效。第二次阅读您的问题后,我注意到您在此处写了“Directives ...>”。虽然这是一个隐藏的提示,但我假设您想在第一部分中插入一行内容,如下所示:

      <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 '/^&lt;\/Directive_1&gt;$/i Deny from 192.168.0.1' .htaccess

      【讨论】:

      • 通过添加-i选项,可以原地更改现有的.htaccess文件:sed -i -e '$i Deny from 192.168.0.1' .htaccess
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 2022-12-02
      相关资源
      最近更新 更多