kri*_*hna 4 command-line xml sed text-processing files
我正在尝试使用 sed 脚本在标签末尾添加字段。假设我在 XML 文件中有一个标签:
<book name="Sed tutorial" price="250"/>
Run Code Online (Sandbox Code Playgroud)
现在我想Book_Width="A"在<book/>标签结束后添加字段,以便我的标签变为:
<book name="Sed tutorial" price="250" Book_Width="A"/>
Run Code Online (Sandbox Code Playgroud)
我试过sed:
sed '/<book "[^>]*>/ a Book_Width="A"'
Run Code Online (Sandbox Code Playgroud)
但它给出了:
<book name="Sed tutorial" price="250"/>
Book_Width="A"
Run Code Online (Sandbox Code Playgroud)
cha*_*aos 15
你不应该用 解析 xml sed,xmlstarlet而是使用一个 xml 解析器。对于您的任务,它将是:
xmlstarlet ed -O --inplace --insert "/book" --type attr -n Book_Width -v A xml_file
Run Code Online (Sandbox Code Playgroud)
然后文件内容是:
<book name="Sed tutorial" price="250" Book_Width="A"/>
Run Code Online (Sandbox Code Playgroud)
ed编辑 xml 树的手段编辑模式-O 省略 xml 标签--insert"/book" 是插入的路径--type attr: 这是一个属性,我们要插入-n属性名称-v在sed“a”中在新行中附加一个模式。
你想要做的是替换(s替代)。为了清楚起见,让我们使用冒号作为分隔符:
sed 's:\(<book.*\)\(/>\):\1 Book_Width="A"\2:'
Run Code Online (Sandbox Code Playgroud)
中的任何内容\( .. \)都是按出现顺序记忆并由 调用的模式\indexnumber,例如\1将重现保存的第一个模式。
所以我们记住<book name="Sed tutorial" price="250"了模式 1 和/>模式 2,然后插入Book_Width="A"中间。
echo '<book name="Sed tutorial" price="250"/>' | sed 's:\(<book.*\)\(/>\):\1 Book_Width="A"\2:'
<book name="Sed tutorial" price="250" Book_Width="A"/>
Run Code Online (Sandbox Code Playgroud)