我今天花了一整天时间试图寻找合适的解决方案,但我无法做到。我的问题:
我有一个XML文件,其中包含多个相同的标签。 例如:
<TASK INSTANCE />
<WORKFLOWLINK CONDITION=""/>
<WORKFLOWLINK CONDITION=""/>
我想在第一个<WORKFLOWLINK
之前添加其他XML文件的内容。我遇到的问题是这个文件充满了双引号和斜杠。我试过更换它们并逃脱它们,但无济于事。
我的尝试主要取决于以下内容:
sed -e "0,/<WORKFLOWLINK/ /<WORKFLOWLINK/{ r ${filename}" -e "}" ${sourcefile}
如果这还不够清楚,我会得到确切的数据,以便您可以看到。
答案 0 :(得分:0)
为了sed的乐趣:
sed -e "0,/<WORKFLOWLINK/{/<WORKFLOWLINK/{r ${sourcefile}" -e"}}"
诀窍是在第一个地址范围条件0,/<WORKFLOWLINK/
之后启动一个新的“模式/命令”对
不理解两个嵌套模式/地址,在第一个模式之后必须有一个命令。使用另外一对曲线{}
可以帮助您。
除了在sed中进行大脑练习外,@ EdMorton建议使用XML处理器。他对MCVE的要求也是合适的。我不得不做一些猜测,看看你想要什么,我希望我猜对了 mcve应至少包括
你肯定会早些时候得到一个答案(如果我不满足你的话),现在可能是一个更好的答案。
因此,在您提出下一个问题之前,请选择https://stackoverflow.com/tour
GNU sed版本4.2.1
GNU bash,版本3.1.17(1)-release(i686-pc-msys)
答案 1 :(得分:0)
每个人,
感谢您与我思考,即使我显然违反了一些规则。 我已经找到了一个解决方案,认为它不是那么漂亮,但是对于一次性操作它已经足够了。
我已从单个命令转移到首先检测我想要放置数据的位置的组合:
from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import user_passes_test
class RetestCreate(CreateView):
@method_decorator(user_passes_test(lambda u: u.is_superuser))
def dispatch(self, *args, **kwargs):
return super().dispatch(*args, **kwargs)
将标记字符串放在所需位置。
在此之后,我将标记替换为我拥有的文件的内容。当我试图在一个语句中完成所有操作时,我设法使各个语句工作,所以我只是单独执行它们。
sed -e "0,/<WORKFLOWLINK/ s/<WORKFLOWLINK/@@MARKER@@\n\t<WORKFLOWLINK'"