xml - 用于查找字符串并在 xml 中的 2 行之后插入的 Shell 脚本
问题描述
我无法获得 XML 的准确输出
<String="12345">
<Bin>
<Value1 />
<Value2 />
</Bin>
</String>
这里需要找到,然后在类似于下面<String=12345>
的内容之后插入一行<Bin>
<String="12345">
<Bin>
<ValueXxxx />
<Value1 />
<Value2 />
</Bin>
</String>
提前感谢您的帮助。
解决方案
尽管我不打算鼓励人们将结构化数据解析或编辑为xml
,但以下内容适用于这种特定情况:
nl=$'\n'
nl="\\$nl"
sed '
:l
N
$!b l
s#\(<String="12345">\n[^\n]*\n\)#\1<ValueXxxx />'"$nl"'#
' input.xml
产生:
<String="12345">
<Bin>
<ValueXxxx />
<Value1 />
<Value2 />
</Bin>
</String>
- 首先,它会在模式空间中读取所有行以启用与多行匹配。
- 正则表达式
<String="12345">\n[^\n]*\n\
与指定的行匹配,后跟任意行。 - 然后该命令在匹配的行之后
s
插入字符串和换行符。<ValueXxxx />
推荐阅读
- emacs - Emacs comint 正在截断输入
- aws-lambda - 如何将 lambda 授权信息的输出传递给 AWS API 网关中的另一个 lambda 函数?
- python-3.x - TypeError: must be str, not int - 在 python 扫雷代码中
- java - 如何在不修改现有 java 程序的情况下强制使用 SSLContext TLS 实例
- git - VS Code - 仅搜索当前活动的 git 分支?
- opencv - 图像子部分的翘曲透视变换不对齐
- r - 值为文本的 dcast
- c# - 控制器的POST方法只有一个参数没有被填充,为什么?
- wpf - 单击从第一个窗口的视图模型打开的第二个窗口后,变量值变为空
- arrays - 如何将文件列表复制到目录?