看看下面的文字,我该如何替换多行文字?
<Model500>
ABC
BCD
CDE
</Model500>
<Model500>
123
234
345
</Model500>
Run Code Online (Sandbox Code Playgroud)
输出可能如下所示
<Model500>
AAA
BBB
CCC
</Model500>
<Model500>
111
333
555
</Model500>
Run Code Online (Sandbox Code Playgroud)
我想sed
使用 Bash 的任何命令行实用程序来完成此操作。我应该使用循环来完成这个吗?
我有一个很小的 XML 文件。我已经被提供了,我需要做的就是在 XML 标记之间提取一些值。因为XML
我的机器中没有可用的解析器实用程序。我正在寻找一种替代方法。
首先,有一个 XML 标签<capacity> </capacity
> 它在 XML 文件中重复了n次,并且在这个 XML 标签之间还有许多其他不同的标签。
我必须分别获取每次出现的<capacity> </capacity>
XML 标记,然后解析它并提取它们下的值。
<subcolumns><capacity><name>45.90</name>
<index>0</index>
<value_type>String</value_type>
<ignore_case_flag>1</ignore_case_flag>
<hidden_flag>0</hidden_flag>
<exclude_from_parse_flag>1</exclude_from_parse_flag>
</capacity>
<capacity><name>57.09</name>
<index>1</index>
<value_type>String</value_type>
<ignore_case_flag>1</ignore_case_flag>
<hidden_flag>0</hidden_flag>
<exclude_from_parse_flag>1</exclude_from_parse_flag>
</capacity>
<capacity><name>55</name>
<index>2</index>
<value_type>String</value_type>
<ignore_case_flag>1</ignore_case_flag>
<hidden_flag>0</hidden_flag>
<exclude_from_parse_flag>1</exclude_from_parse_flag>
</capacity>
</subcolumns>
Run Code Online (Sandbox Code Playgroud)
所以我认为的逻辑是找到<capacity> </capacity>
XML 标记的第一次出现并将其打印到临时文件,然后删除第一次出现。
<capacity><name>45.90</name>
<index>0</index>
<value_type>String</value_type>
<ignore_case_flag>1</ignore_case_flag>
<hidden_flag>0</hidden_flag>
<exclude_from_parse_flag>1</exclude_from_parse_flag>
</capacity>
Run Code Online (Sandbox Code Playgroud)
此后,当第二次这样做时,<capacity> </capacity>
会考虑新的XML 标记对。所以这必须重复多次,直到<capacity> </capacity>
找到最后一个标签。每次提取这部分时,数据都会发生变化,并且可以提取。
现在我只想<capacity> </capacity>
从主 XML 文件中选择第一次出现的XML 标记并将其打印到临时文件并删除该部分。
这就是我尝试过的,但对我没有任何效果。
sed -n '2,${/<capacity>\(.*\)<\/capacity>/\1/p;q;}' "<input XML …
Run Code Online (Sandbox Code Playgroud) 我的文件包含无法明确识别的数据。像这样说:
<?xml version="1.0" encoding="UTF-8" ?><ns0:collection
xmlns:ns0="http://namspace/Service/1.0"><Record>
.
.</Record></ns0:collection>
Run Code Online (Sandbox Code Playgroud)
我必须将 N 个此类文件合并并创建一个文件。所以我需要完成以下工作:
</ns0:collection>
第一个文件中删除结束标签<?xml version="1.0" encoding="UTF-8" ?><ns0:collection xmlns:ns0="http://namspace/Service/1.0">
和 </ns0:collection>
<?xml version="1.0" encoding="UTF-8" ?><ns0:collection xmlns:ns0="http://namspace/Service/1.0">
最后一个文件并将它们全部合并在一起我尝试使用sed
命令处理第一个文件,但没有产生任何结果,“merged.xml”为空。
sed '/<\/ns0:collection>/d' $file1 > merged.xml
Run Code Online (Sandbox Code Playgroud)
有什么建议么?
Source file example:
<HDR></HDR><b></b><c></c>
Run Code Online (Sandbox Code Playgroud)
(在一行中创建的 XML 文件)
或者
Source file example:
<HDR>
</HDR>
<b>
</b>
<c>
</c>
Run Code Online (Sandbox Code Playgroud)
我需要<b>
在两种源格式之前删除文件的所有内容。我尝试使用以下方法
sed 's/^.*b/b/'
Run Code Online (Sandbox Code Playgroud)
但这并不能取代它。请让我知道是否有替代方法。
给定数据库名称oltt206
或DB01
我希望从下面的 xml 中提取其各自的username
,password
和:connection string
wladmin@myremhost:/tmp$ cat /web/bea_apps/uat/Tomcat_Home_v9.0.56/TomcatNode01/conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy …
Run Code Online (Sandbox Code Playgroud) 示例input.xml
文件
<user dn="CN=company,DN=Department">
<role name="ROLE_ADMIN"/>
</user>
Run Code Online (Sandbox Code Playgroud)
输出应该是
<user dn="String_1,String_2">
<role name="ROLE_ADMIN"/>
</user>
Run Code Online (Sandbox Code Playgroud)
请就上述问题陈述给我建议。注意:dn 不应硬编码,因为该值也可能为空。例如 dn=""