2014-01-26 41 views
0

我正在試圖讓我的網址更簡單,以減少垃圾郵件。當我必須通過ssh進入並且繼續在我的.htaccess中添加另一行時,它變得非常繁瑣而且非常快。所以我想知道是否有可以輕鬆地添加一行文本的方式,並且可以放在一個腳本在bash或python中寫入特定行

例子:

<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的答案接受

+1

請參閱http://stackoverflow.com/questions/18272379/bash-inserting-a-line-in-a-file-at-a-specific-location – BroSlow

回答

0

使用的head組合,echotail,您可以創建一個具有所需行的臨時文件,然後在原始文件上創建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覆蓋原件,保存備份。

這個解決方案當然假設您知道您想要添加新內容的文件末尾有多少行。

0

sed可能是最容易使用和幾乎無處不在。下面將最後一個前插入線:

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

這工作假設你想要的最後一行之前插入。在第二次閱讀你的問題後,我注意到你寫了「<其他指令這裏... >」。雖然這是一個有點隱蔽的暗示,我假設你想插入一行到第一部分爲內容是這樣的:

<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

通過添加'-i'選項,現有的' .htaccess'文件可以更改:'sed -i -e'$ i Deny from 192.168.0.1'.htaccess' – John1024