[英]Write to specific line in bash or python
我正在嘗試使我更容易地使我的網址縮短器減少垃圾郵件。 當我不得不通過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答案
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
這是sh / ksh / bash中的另一種方式: http : //stromberg.dnsalias.org/~strombrg/contextual
使用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
覆蓋原始文件,保存備份。
當然,此解決方案假設您知道要添加新內容的文件末尾有幾行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.