Linux:将文件中的第一个字符串替换为包含引号和斜杠的其他文件的内容。

标签 linux sed

今天我花了一整天的时间试图找到合适的解决方案,但我做不到。我的问题:

我有一个 XML 文件,其标签包含多个相同的标签。 示例:

<TASK INSTANCE /> <WORKFLOWLINK CONDITION=""/> <WORKFLOWLINK CONDITION=""/>

我想在第一个 <WORKFLOWLINK 之前添加另一个 XML 文件的内容.我遇到的问题是这个文件充满了双引号和斜线。我试过替换它们并转义它们,但无济于事。

我的尝试主要在以下方面达到高潮: sed -e "0,/<WORKFLOWLINK/ /<WORKFLOWLINK/{ r ${filename}" -e "}" ${sourcefile}

如果这还不够清楚,我会获取准确的数据以便您查看。

最佳答案

为了 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)

关于Linux:将文件中的第一个字符串替换为包含引号和斜杠的其他文件的内容。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43853034/

相关文章:

linux - 如何从 TXT 或 CSV 中删除具有特定模式的行

java - 如何使用 sed 或 awk 编辑很长的 Java 类

linux - Sed 命令适用于 Linux,但不适用于 OS X

r - 从 R 调用 sed 时转义引号

linux - sed 命令编辑多个文件(插入,替换行)

linux中两个进程之间的上下文切换

linux - 从文件添加 iptable 规则

linux - 使用脚本 bash/expect 保持 ssh session 事件

linux - 将终端的输出重定向到 libreoffice excel 文件

linux - ls 和 chmod 不适用于 nfs 挂载的文件