gpt4 book ai didi

python - 查找两个占位符之间的所有内容并将其替换为变量的内容

转载 作者:IT王子 更新时间:2023-10-29 01:22:26 26 4
gpt4 key购买 nike

你好,我一直在尝试弄清楚如何在两个占位符之间替换/插入文本字符串。

#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()

最佳答案

这似乎确实符合您的要求:

sed -ie "/#start/,/#end/{/#start/b;/#end/b;s/.*/$replace_var/;}" file.txt

内部 /#start/b/#end/b 跳过这些行,否则您也将替换它们。

关于python - 查找两个占位符之间的所有内容并将其替换为变量的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15147320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com