アロハ、2 つのプレースホルダー間でテキスト文字列を置換/挿入する方法を見つけようとしています。
#start
REPLACE ANYTHING IN HERE
#end
もともと私はsed経由でBASHでこれをやろうとしていましたが、変数をsedに渡そうとしたときに障害にぶつかりました。
sed -n -i '/#start/{p;:a;N;/#end/!ba;s/.*\n/hello\n/};p' file.txt
戻り値
#start
hello
#end
しかし、私が試しても喜びはありません
sed -n -i '/#start/{p;:a;N;/#end/!ba;s/.*\n/$replace_var\n/};p' file.txt
また
sed -n -i "/#start/{p;:a;N;/#end/!ba;s/.*\n/$replace_var\n/};p" file.txt
私は何時間もこれに取り組んでいて、周りを検索しましたが、解決策は見つかりませんでした. 私は、python や他の言語、または awk で試してみるつもりです。私はこの分野ではちょっと新しいので、有用な情報をいただければ幸いです。
前もって感謝します
これは私が最終的に行ったものです。これは、cron と組み合わせて、公開されている最新の ssh ブロックリストで /var/etc/hosts.deny ファイルを更新するスクリプトです。
import re
import urllib2
hosts_deny = open('/etc/hosts.deny','r+')
hosts_deny_text = hosts_deny.read()
blockedHosts = urllib2.urlopen('http://www.openbl.org/lists/hosts.deny').read()
place = re.compile('(?<=#start)(\r?\n)'
'(.*?)'
'(?=\r?\n#end)',re.DOTALL)#DOTALL enables '.' to also include
#a new line
hosts_deny_text = re.sub(place, '\n'+ blockedHosts, hosts_deny_text)
hosts_deny.seek(0)
hosts_deny.write(hosts_deny_text)
hosts_deny.close()